From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id E73343858406 for ; Fri, 26 Aug 2022 09:33:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E73343858406 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661506399; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=jXp3AejcGYktzfujOF2fHgecUXPBZ4ZiUQokE5TssuI=; b=AjSpAHEqrFvlWJT6auG5L/G+sfClfaNE6Wa1I6sGHPufWUWJDubosTfwGNmReQ7CLvVb36 Mq29V+CFofSvkVDlpQk8eZg4+JqDMcE6pO45vK3eiii4mhXT7Hw4yj5gIh74TJ0+Uz7rev Yi68rA0KJ/UuaLjE8b9P9KIsLKOrMAw= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-94-blVq3w64PuOIDaF0E9-z4g-1; Fri, 26 Aug 2022 05:33:18 -0400 X-MC-Unique: blVq3w64PuOIDaF0E9-z4g-1 Received: by mail-qk1-f199.google.com with SMTP id bs43-20020a05620a472b00b006bb56276c94so844917qkb.10 for ; Fri, 26 Aug 2022 02:33:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=jXp3AejcGYktzfujOF2fHgecUXPBZ4ZiUQokE5TssuI=; b=G3ftSVsSjtw1upGJ2WOksC10jaStS5jt3UZMKZgKgzq1+TLWv9jO8vYZgXMwVdNKwO vxZUHdpYk8KsEG5+a8biPwkjMhSLeo5+qT/oDOGH6YgzzdiwEtWCUGSbOayFEpWHrlzI IOCK+CkYDAP8wzc751eIFXtXWxNOEZ2qQZv2N9lmFbiIKxYr8TdqM7uDswtU2bqA/bjK RzqFtMdi/Ba7n1EBDaEUftBFF3X84X3M3QQqr/y2rBAwotvA6gjk8Zvk5ufdU5Eixfdw jErDHsC3whjly2jxf/EEqdpmrIwhE7iC3LhrO+zDLfHZ7FbeFjC96/TjpmPcw5WNIFwG 3AFQ== X-Gm-Message-State: ACgBeo2ndIFdoMHq7lVDiSPwFt7Z+Nt9mulIceYsLvIM57lQ/eCDQwR7 sUmyaPI3xSZcZDfsYxis4pk1zGNGJjUvb/ct0MHEdFaN+XwwKVBLcTKRGrbUHOyC5khTAmllH7Q uQirwc2cA5o8Zc+S8sELYiNHgTb1eRaU= X-Received: by 2002:a05:6214:f0e:b0:496:e627:2d26 with SMTP id gw14-20020a0562140f0e00b00496e6272d26mr7272351qvb.42.1661506397745; Fri, 26 Aug 2022 02:33:17 -0700 (PDT) X-Google-Smtp-Source: AA6agR7jWp8Z7J3CAkUvwOwRPDxVfbCHjZaRaPFUrdkjXbyDiiFj4yYgIO9121bZxaZhtHlqF0H6VVhOMmvB4f/Sdd4= X-Received: by 2002:a05:6214:f0e:b0:496:e627:2d26 with SMTP id gw14-20020a0562140f0e00b00496e6272d26mr7272344qvb.42.1661506397506; Fri, 26 Aug 2022 02:33:17 -0700 (PDT) MIME-Version: 1.0 References: <0ec115b4-917a-403e-88fe-6a9360659bd8@gmail.com> <10daf589-f064-5d82-3093-9efe3d5af910@gmail.com> In-Reply-To: <10daf589-f064-5d82-3093-9efe3d5af910@gmail.com> From: Jonathan Wakely Date: Fri, 26 Aug 2022 10:33:06 +0100 Message-ID: Subject: Re: [PATCH][_GLIBCXX_DEBUG] Add basic_string::starts_with/ends_with checks To: =?UTF-8?Q?Fran=C3=A7ois_Dumont?= Cc: "libstdc++@gcc.gnu.org" X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="0000000000009dcc5f05e7219af4" X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --0000000000009dcc5f05e7219af4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 25 Aug 2022 at 17:12, Fran=C3=A7ois Dumont via Libstdc++ wrote: > > I spent more time on this. > > Is there some discussion in the C++ Standard Committee to do something > like what I've done ? I guess adding nullptr_t overloads for all the > methods taking pointer is not an option, is it ? No, I don't think so. That doesn't really help anyway, it would only trigger if somebody calls the function with the nullptr literal, which seems unlikely. It wouldn't help for starts_with((const char*)0) or passing a pointer variable that happens to be null. Passing a literal nullptr to those functions is just dumb, I don't think we should waste our time (and slow down compilation) by handling it. If they cannot be called with a null pointer then they should use __attribute__((__nonnull__)), and let the compiler handle it. That's more reliable, works without assertions enabled, and handles (const char*)0 as well as literal nullptr constants. I'll test the attached patch, which does that. > Note that compilation fails but despite the dg-do xfail the test ends up > FAIL and not XFAIL. Is this the correct syntax: > // { dg-do compile { target c++2a xfail *-*-* } } > ? No, xfail means fails at runtime. You would want to use just { target c++20 ) and then add dg-error to the lines that are expected to trigger errors, or dg-warning for warnings. --0000000000009dcc5f05e7219af4 Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7a9znxu0 Y29tbWl0IGMxYTVkOWViZTczYjZhNzUxMjc1N2M1Y2IyNDdkMjA2ODlmYTZjYjYKQXV0aG9yOiBK b25hdGhhbiBXYWtlbHkgPGp3YWtlbHlAcmVkaGF0LmNvbT4KRGF0ZTogICBGcmkgQXVnIDI2IDA5 OjQzOjMyIDIwMjIKCiAgICBsaWJzdGRjKys6IEFkZCBub25udWxsIHRvIHN0YXJ0c193aXRoL2Vu ZHNfd2l0aC9jb250YWlucyBzdHJpbmcgbWVtYmVycwogICAgCiAgICBJZGVhbGx5IHRoaXMgd291 bGRuJ3QgYmUgbmVlZGVkLCBiZWNhdXNlIGV2ZW50dWFsbHkgdGhlc2UgcG9pbnRlcnMgYWxsCiAg ICBnZXQgcGFzc2VkIHRvIGVpdGhlciB0aGUgYmFzaWNfc3RyaW5nX3ZpZXcoY29uc3QgQ2hhclQq KSBjb25zdHJ1Y3Rvciwgb3IKICAgIHRvIGJhc2ljX3N0cmluZ192aWV3OjpmaW5kKGNvbnN0IENo YXJUKiksIGJvdGggb2Ygd2hpY2ggYWxyZWFkeSBoYXZlIHRoZQogICAgYXR0cmlidXRlLiBCdXQg Zm9yIHRoYXQgdG8gd29yayByZXF1aXJlcyBvcHRpbWl6YXRpb24sIHNvIHRoYXQgdGhlIG51bGwK ICAgIHZhbHVlIGdldHMgcHJvcGFnYXRlZCB0aHJvdWdoIHRoZSBjYWxsIGNoYWluLgogICAgCiAg ICBBZGRpbmcgaXQgZXhwbGljaXRseSB0byBlYWNoIG1lbWJlciB0aGF0IHJlcXVpcmVzIGEgbm9u LW51bGwgcG9pbnRlcgogICAgbWFrZXMgdGhlIGRpYWdub3N0aWNzIG1vcmUgcmVsaWFibGUgZXZl biB3aXRob3V0IG9wdGltaXphdGlvbi4gSXQncwogICAgYmV0dGVyIHRvIGdpdmUgYSBkaWFnbm9z dGljIGVhcmxpZXIgYW55d2F5LCBhdCB0aGUgYWN0dWFsIHByb2JsZW1hdGljCiAgICBjYWxsIGlu IHRoZSB1c2VyJ3MgY29kZS4KICAgIAogICAgbGlic3RkYysrLXYzL0NoYW5nZUxvZzoKICAgIAog ICAgICAgICAgICAqIGluY2x1ZGUvYml0cy9iYXNpY19zdHJpbmcuaCAoc3RhcnRzX3dpdGgsIGVu ZHNfd2l0aCwgY29udGFpbnMpOgogICAgICAgICAgICBBZGQgbm9ubnVsbCBhdHRyaWJ1dGUuCiAg ICAgICAgICAgICogaW5jbHVkZS9iaXRzL2Nvd19zdHJpbmcuaCAoc3RhcnRzX3dpdGgsIGVuZHNf d2l0aCwgY29udGFpbnMpOgogICAgICAgICAgICBMaWtld2lzZS4KICAgICAgICAgICAgKiBpbmNs dWRlL3N0ZC9zdHJpbmdfdmlldyAoc3RhcnRzX3dpdGgsIGVuZHNfd2l0aCwgY29udGFpbnMpOgog ICAgICAgICAgICBMaWtld2lzZS4KCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9i aXRzL2Jhc2ljX3N0cmluZy5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19zdHJp bmcuaAppbmRleCBiMDRmYmE5NTY3OC4uOWQ4YjQxNTMwMmIgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2JpdHMvYmFzaWNfc3RyaW5nLmgKKysrIGIvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9iYXNpY19zdHJpbmcuaApAQCAtMzQwMCw2ICszNDAwLDcgQEAgX0dMSUJDWFhfQkVH SU5fTkFNRVNQQUNFX0NYWDExCiAgICAgICBzdGFydHNfd2l0aChfQ2hhclQgX194KSBjb25zdCBu b2V4Y2VwdAogICAgICAgeyByZXR1cm4gX19zdl90eXBlKHRoaXMtPmRhdGEoKSwgdGhpcy0+c2l6 ZSgpKS5zdGFydHNfd2l0aChfX3gpOyB9CiAKKyAgICAgIFtbX19nbnVfXzo6X19ub25udWxsX19d XQogICAgICAgY29uc3RleHByIGJvb2wKICAgICAgIHN0YXJ0c193aXRoKGNvbnN0IF9DaGFyVCog X194KSBjb25zdCBub2V4Y2VwdAogICAgICAgeyByZXR1cm4gX19zdl90eXBlKHRoaXMtPmRhdGEo KSwgdGhpcy0+c2l6ZSgpKS5zdGFydHNfd2l0aChfX3gpOyB9CkBAIC0zNDEyLDYgKzM0MTMsNyBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ1hYMTEKICAgICAgIGVuZHNfd2l0aChfQ2hhclQg X194KSBjb25zdCBub2V4Y2VwdAogICAgICAgeyByZXR1cm4gX19zdl90eXBlKHRoaXMtPmRhdGEo KSwgdGhpcy0+c2l6ZSgpKS5lbmRzX3dpdGgoX194KTsgfQogCisgICAgICBbW19fZ251X186Ol9f bm9ubnVsbF9fXV0KICAgICAgIGNvbnN0ZXhwciBib29sCiAgICAgICBlbmRzX3dpdGgoY29uc3Qg X0NoYXJUKiBfX3gpIGNvbnN0IG5vZXhjZXB0CiAgICAgICB7IHJldHVybiBfX3N2X3R5cGUodGhp cy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmVuZHNfd2l0aChfX3gpOyB9CkBAIC0zNDI2LDYgKzM0 MjgsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ1hYMTEKICAgICAgIGNvbnRhaW5zKF9D aGFyVCBfX3gpIGNvbnN0IG5vZXhjZXB0CiAgICAgICB7IHJldHVybiBfX3N2X3R5cGUodGhpcy0+ ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmNvbnRhaW5zKF9feCk7IH0KIAorICAgICAgW1tfX2dudV9f OjpfX25vbm51bGxfX11dCiAgICAgICBjb25zdGV4cHIgYm9vbAogICAgICAgY29udGFpbnMoY29u c3QgX0NoYXJUKiBfX3gpIGNvbnN0IG5vZXhjZXB0CiAgICAgICB7IHJldHVybiBfX3N2X3R5cGUo dGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmNvbnRhaW5zKF9feCk7IH0KZGlmZiAtLWdpdCBh L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvY293X3N0cmluZy5oIGIvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9jb3dfc3RyaW5nLmgKaW5kZXggZjE2ZTMzYWMxZWYuLmY1ZjAzMzM4ZWVjIDEw MDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Nvd19zdHJpbmcuaAorKysgYi9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Nvd19zdHJpbmcuaApAQCAtMzAxMiw2ICszMDEyLDcg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIHN0YXJ0c193aXRoKF9D aGFyVCBfX3gpIGNvbnN0IG5vZXhjZXB0CiAgICAgICB7IHJldHVybiBfX3N2X3R5cGUodGhpcy0+ ZGF0YSgpLCB0aGlzLT5zaXplKCkpLnN0YXJ0c193aXRoKF9feCk7IH0KIAorICAgICAgW1tfX2du dV9fOjpfX25vbm51bGxfX11dCiAgICAgICBib29sCiAgICAgICBzdGFydHNfd2l0aChjb25zdCBf Q2hhclQqIF9feCkgY29uc3Qgbm9leGNlcHQKICAgICAgIHsgcmV0dXJuIF9fc3ZfdHlwZSh0aGlz LT5kYXRhKCksIHRoaXMtPnNpemUoKSkuc3RhcnRzX3dpdGgoX194KTsgfQpAQCAtMzAyNCw2ICsz MDI1LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIGVuZHNfd2l0 aChfQ2hhclQgX194KSBjb25zdCBub2V4Y2VwdAogICAgICAgeyByZXR1cm4gX19zdl90eXBlKHRo aXMtPmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5lbmRzX3dpdGgoX194KTsgfQogCisgICAgICBbW19f Z251X186Ol9fbm9ubnVsbF9fXV0KICAgICAgIGJvb2wKICAgICAgIGVuZHNfd2l0aChjb25zdCBf Q2hhclQqIF9feCkgY29uc3Qgbm9leGNlcHQKICAgICAgIHsgcmV0dXJuIF9fc3ZfdHlwZSh0aGlz LT5kYXRhKCksIHRoaXMtPnNpemUoKSkuZW5kc193aXRoKF9feCk7IH0KQEAgLTMwMzgsNiArMzA0 MCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBjb250YWlucyhf Q2hhclQgX194KSBjb25zdCBub2V4Y2VwdAogICAgICAgeyByZXR1cm4gX19zdl90eXBlKHRoaXMt PmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5jb250YWlucyhfX3gpOyB9CiAKKyAgICAgIFtbX19nbnVf Xzo6X19ub25udWxsX19dXQogICAgICAgYm9vbAogICAgICAgY29udGFpbnMoY29uc3QgX0NoYXJU KiBfX3gpIGNvbnN0IG5vZXhjZXB0CiAgICAgICB7IHJldHVybiBfX3N2X3R5cGUodGhpcy0+ZGF0 YSgpLCB0aGlzLT5zaXplKCkpLmNvbnRhaW5zKF9feCk7IH0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMr Ky12My9pbmNsdWRlL3N0ZC9zdHJpbmdfdmlldyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9z dHJpbmdfdmlldwppbmRleCAzMGZmMTM2YjFjYi4uNWI5NmZmZWVjZDYgMTAwNjQ0Ci0tLSBhL2xp YnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9zdHJpbmdfdmlldworKysgYi9saWJzdGRjKystdjMvaW5j bHVkZS9zdGQvc3RyaW5nX3ZpZXcKQEAgLTM2MCw2ICszNjAsNyBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTgogICAgICAgc3RhcnRzX3dpdGgoX0NoYXJUIF9feCkgY29uc3Qgbm9l eGNlcHQKICAgICAgIHsgcmV0dXJuICF0aGlzLT5lbXB0eSgpICYmIHRyYWl0c190eXBlOjplcSh0 aGlzLT5mcm9udCgpLCBfX3gpOyB9CiAKKyAgICAgIFtbX19nbnVfXzo6X19ub25udWxsX19dXQog ICAgICAgY29uc3RleHByIGJvb2wKICAgICAgIHN0YXJ0c193aXRoKGNvbnN0IF9DaGFyVCogX194 KSBjb25zdCBub2V4Y2VwdAogICAgICAgeyByZXR1cm4gdGhpcy0+c3RhcnRzX3dpdGgoYmFzaWNf c3RyaW5nX3ZpZXcoX194KSk7IH0KQEAgLTM3Nyw2ICszNzgsNyBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTgogICAgICAgZW5kc193aXRoKF9DaGFyVCBfX3gpIGNvbnN0IG5vZXhj ZXB0CiAgICAgICB7IHJldHVybiAhdGhpcy0+ZW1wdHkoKSAmJiB0cmFpdHNfdHlwZTo6ZXEodGhp cy0+YmFjaygpLCBfX3gpOyB9CiAKKyAgICAgIFtbX19nbnVfXzo6X19ub25udWxsX19dXQogICAg ICAgY29uc3RleHByIGJvb2wKICAgICAgIGVuZHNfd2l0aChjb25zdCBfQ2hhclQqIF9feCkgY29u c3Qgbm9leGNlcHQKICAgICAgIHsgcmV0dXJuIHRoaXMtPmVuZHNfd2l0aChiYXNpY19zdHJpbmdf dmlldyhfX3gpKTsgfQpAQCAtMzkyLDYgKzM5NCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9WRVJTSU9OCiAgICAgICBjb250YWlucyhfQ2hhclQgX194KSBjb25zdCBub2V4Y2VwdAogICAg ICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3gpICE9IG5wb3M7IH0KIAorICAgICAgW1tfX2dudV9f OjpfX25vbm51bGxfX11dCiAgICAgICBjb25zdGV4cHIgYm9vbAogICAgICAgY29udGFpbnMoY29u c3QgX0NoYXJUKiBfX3gpIGNvbnN0IG5vZXhjZXB0CiAgICAgICB7IHJldHVybiB0aGlzLT5maW5k KF9feCkgIT0gbnBvczsgfQo= --0000000000009dcc5f05e7219af4--