From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by sourceware.org (Postfix) with ESMTPS id BE4B83858C42; Sat, 16 Dec 2023 09:37:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BE4B83858C42 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BE4B83858C42 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::62b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702719469; cv=none; b=BqR3szCQ+bc7OxIDx3DlvyuXFG/ZTEU8ZWbHn6zDGBYtHhFxyuNmLlqIg/6LAgdeqdUkvzBpgzC3HbPu8/oqVFWdW7MvT0uNl7Y05zEHw4qN8g3YRaVPxT1mD+fUb7su+NVn263ei3uDEzJneUVz3WSnUGYadu55yjYwaK4RYhQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702719469; c=relaxed/simple; bh=GqgMwe3aSv1zqKciBSlsUOCFFNS9hyZHKDjBhIQpF88=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=v1/EqAf/JpOBW+bFkmaPgRAQH6gkYoHzdG2ad/fdCW+MFzVYHRcCscRoI5Y0wRRJA3eBztaPC1FuehuOzc4YjiIW8DDPEVLj7lPlGKjShXbWpzivCAG4MkDFwNAcTnE+wvZe8dqOTml5bmOJJ8EeaBKUYIVzSVJl9nwTPrgYI1s= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-a1ec87a7631so119777266b.0; Sat, 16 Dec 2023 01:37:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702719466; x=1703324266; darn=gcc.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=nILHdKHI5pBMMPeZ0OelkzruL82mhIyp7b/Z7PSAQz0=; b=JA/JavfRt9/TybxLd/XCAr/x3G79/f1KD3e8+W/peOQyspPGJmohmZrScLeI2n64e4 1WiXojAPR0WROByA9OuFJhFlIr/R1u8W57yg1lfAUoRC0ECBXT6YT+++izX2khT7h+uV Ia2qHsUS8EFBpQDjYH6zkG62hK5ERKYgAcj5LKEkm+x3p8SxDni0nH5vZSrgmS0Xmv8k zIGKCMLQ+XaV1bO00yq/ZhuUia+DCgq8Xy7elOEL4vxqt/7nTscoGRCPpzpcy+Qfgjpc RHLV4w/2AmSf0rcNwlkMCgObqu0NxvuTFMc8a8JfHvwxj0MnBFocqll4T2xQXAs/eFNN 5Gyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702719466; x=1703324266; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=nILHdKHI5pBMMPeZ0OelkzruL82mhIyp7b/Z7PSAQz0=; b=EZCQu4bzB20KBGKH2qxqQdFjhQqT1+WjRliyyhuyq4O/AEbywxF7MouoOb4c7vq2Q+ 2mBFcy4zcMfOFfvcLBDCaek4TOfOIoKt0T/mJvQZXGqlwrZeo66cVBvcLcUKpdHBAP18 67xHhpUpgBAvx29TNHsVSSG6oMtRo4VzZRPS9bWK1vnRJoRLnE5ookNFMbBO7aN05Ysq ZhWE7J+/XlCpBmMfwz+Y7oRGaQTAR3QnxSYpxtZyXtEMzGDgIcFNZgMURV8X4AHs56wr aUB6BDmvcTvA81RrpOVevgqG1ZJ91cy+rqzrlla1pcwIAqhQDLxcexCQmdluWAsZdnw4 nEHA== X-Gm-Message-State: AOJu0YwpBxGfJvMH58uzHWb4A/Mcy/dnFiexBbC/f8gnFtNgz83/hjri rIKh6vB6PgPj9ZbLc110ahfMyY05i47pPM+gdx0= X-Google-Smtp-Source: AGHT+IFVBFAoEsJSjXxVinfLwmy6Kxt7xcOlzVhJ/SZ53wQV0U0AO+SXwxJ0MX0ckq/QWmTy2p07dchjL/+UFoFeJnU= X-Received: by 2002:a17:906:106:b0:a10:ef07:fa9e with SMTP id 6-20020a170906010600b00a10ef07fa9emr8940580eje.6.1702719466019; Sat, 16 Dec 2023 01:37:46 -0800 (PST) MIME-Version: 1.0 References: <20231206142930.739485-1-jwakely@redhat.com> <44072750-3a93-419e-af86-924fc4f29f02@idea> In-Reply-To: From: Jonathan Wakely Date: Sat, 16 Dec 2023 09:37:34 +0000 Message-ID: Subject: Re: [PATCH] libstdc++: Make __gnu_debug::vector usable in constant expressions [PR109536] To: Patrick Palka Cc: Jonathan Wakely , libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="000000000000ecad4e060c9d445c" X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,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: --000000000000ecad4e060c9d445c Content-Type: text/plain; charset="UTF-8" On Sat, 16 Dec 2023 at 09:14, Jonathan Wakely wrote: > > On Sat, 16 Dec 2023 at 00:27, Patrick Palka wrote: > > > > On Wed, 6 Dec 2023, Jonathan Wakely wrote: > > > > > Any comments on this approach? > > > > > > -- >8 -- > > > > > > This makes constexpr std::vector (mostly) work in Debug Mode. All safe > > > iterator instrumentation and checking is disabled during constant > > > evaluation, because it requires mutex locks and calls to non-inline > > > functions defined in libstdc++.so. It should be OK to disable the safety > > > checks, because most UB should be detected during constant evaluation > > > anyway. > > > > > > We could try to enable the full checking in constexpr, but it would mean > > > wrapping all the non-inline functions like _M_attach with an inline > > > _M_constexpr_attach that does the iterator housekeeping inline without > > > mutex locks when calling for constant evaluation, and calls the > > > non-inline function at runtime. That could be done in future if we find > > > that we've lost safety or useful checking by disabling the safe > > > iterators. > > > > > > There are a few test failures in C++20 mode, which I'm unable to > > > explain. The _Safe_iterator::operator++() member gives errors for using > > > non-constexpr functions during constant evaluation, even though those > > > functions are guarded by std::is_constant_evaluated() checks. The same > > > code works fine for C++23 and up. > > > > AFAICT these C++20 test failures are really due to the variable > > definition of non-literal type > > > > 381 __gnu_cxx::__scoped_lock __l(this->_M_get_mutex()); > > > > which were prohibited in a constexpr function (even if that code was > > never executed) until C++23's P2242R3. > > Ah, I figured it was a core change but I couldn't recall which one. Thanks. > > > We can use an immediately invoked lambda to work around this: > > > > 381 [this] { > > 382 __gnu_cxx::__scoped_lock __l(this->_M_get_mutex()); > > 383 ++base(); > > 384 }(); > > 385 return *this; > > We'd need some #if as this code has to work for C++98. But that's doable. The attached patch seems simpler, I'm testing it now. --000000000000ecad4e060c9d445c 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_lq7v738o0 Y29tbWl0IDVkNzBjNmMyOTY1NjQ3MDc3NzQ5YTg2OWU5Y2RiZjdlOTFkYmE0YzcKQXV0aG9yOiBK b25hdGhhbiBXYWtlbHkgPGp3YWtlbHlAcmVkaGF0LmNvbT4KRGF0ZTogICBTYXQgRGVjIDE2IDA5 OjMxOjQwIDIwMjMKCiAgICBsaWJzdGRjKys6IEZpeCBlcnJvcnMgZm9yIGNvbnN0ZXhwciBfX2du dV9kZWJ1Zzo6dmVjdG9yIGluIEMrKzIzIFtQUjEwOTUzNl0KICAgIAogICAgSW4gdGhlIGNvbW1p dCBsb2cgZm9yIHIxNC02NTUzLWc3ZDAwYTU5MjI5ZWUxNyBJIG5vdGVkIHNvbWUgdGVzdHMgRkFJ TAogICAgaW4gQysrMjAgbW9kZS4gUGF0cmljayBpZGVudGlmaWVkIHRoYXQgdGhleSB3ZXJlIGR1 ZSB0byB0aGUgdmFyaWFibGUKICAgIGRlZmluaXRpb25zIG9mIG5vbi1saXRlcmFsIHR5cGUgX19z Y29wZWRfbG9jaywgd2hpY2ggd2VyZSBwcm9oaWJpdGVkIGluCiAgICBhIGNvbnN0ZXhwciBmdW5j dGlvbiAoZXZlbiBpZiB0aGF0IGNvZGUgd2FzIG5ldmVyIGV4ZWN1dGVkKSB1bnRpbAogICAgQysr MjMncyBQMjI0MlIzLgogICAgCiAgICBXZSBjYW4gbW92ZSB0aGUgcHJvYmxlbWF0aWMgY29kZSBp bnRvIG5ldyBub24tY29uc3RleHByIGZ1bmN0aW9ucyB0aGF0CiAgICBhcmUgbm90IGNhbGxlZCBk dXJpbmcgY29uc3RhbnQgZXZhbHVhdGlvbi4KICAgIAogICAgVGhlcmUncyBhbHNvIGEgd2Fybmlu ZyBhYm91dCBhIGNvbnN0ZXhwciBfTV9zd2FwIGZ1bmN0aW9uIHdoaWNoIGlzIG5ldmVyCiAgICBk ZWZpbmVkLiBUaGF0J3Mgc2ltcGx5IGJlY2F1c2UgSSBhZGRlZCB0aGUgX0dMSUJDWFgyMF9DT05T VEVYUFIgbWFjcm8gb24KICAgIGEgbWVtYmVyIHRoYXQgZG9lc24ndCBuZWVkIGl0LgogICAgCiAg ICBsaWJzdGRjKystdjMvQ2hhbmdlTG9nOgogICAgCiAgICAgICAgICAgIFBSIGxpYnN0ZGMrKy8x MDk1MzYKICAgICAgICAgICAgKiBpbmNsdWRlL2RlYnVnL3NhZmVfYmFzZS5oIChfU2FmZV9zZXF1 ZW5jZV9iYXNlOjpfTV9zd2FwKToKICAgICAgICAgICAgUmVtb3ZlIF9HTElCQ1hYMjBfQ09OU1RF WFBSIGZyb20gbm9uLWlubGluZSBtZW1iZXIgZnVuY3Rpb24uCiAgICAgICAgICAgICogaW5jbHVk ZS9kZWJ1Zy9zYWZlX2l0ZXJhdG9yLmggKF9TYWZlX2l0ZXJhdG9yOjpfTV9tb3ZlX2Fzc2lnbikK CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9kZWJ1Zy9zYWZlX2Jhc2UuaCBiL2xp YnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL3NhZmVfYmFzZS5oCmluZGV4IGQ5YzE3YjUyYjQ4Li4x NTE5YWQ4MDlhNCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvc2FmZV9i YXNlLmgKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvc2FmZV9iYXNlLmgKQEAgLTI2 OCw3ICsyNjgsNiBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKICAgICAgKiAgb3BlcmF0aW9uIGlz IGNvbXBsZXRlIGFsbCBpdGVyYXRvcnMgdGhhdCBvcmlnaW5hbGx5IHJlZmVyZW5jZWQKICAgICAg KiAgb25lIGNvbnRhaW5lciBub3cgcmVmZXJlbmNlIHRoZSBvdGhlciBjb250YWluZXIuCiAgICAg ICovCi0gICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICB2b2lkCiAgICAgX01fc3dhcChfU2Fm ZV9zZXF1ZW5jZV9iYXNlJiBfX3gpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKIApkaWZmIC0tZ2l0 IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvc2FmZV9pdGVyYXRvci5oIGIvbGlic3RkYysr LXYzL2luY2x1ZGUvZGVidWcvc2FmZV9pdGVyYXRvci5oCmluZGV4IDI2ZjAwODk4MmY4Li5iZGUz NGUxZjk5YyAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvc2FmZV9pdGVy YXRvci5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL3NhZmVfaXRlcmF0b3IuaApA QCAtMjk1LDcgKzI5NSwxMyBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKIAkgICAgYmFzZSgpID0g X194LmJhc2UoKTsKIAkgICAgcmV0dXJuICp0aGlzOwogCSAgfQorCV9NX21vdmVfYXNzaWduKHN0 ZDo6bW92ZShfX3gpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CiAKKyAgICAgIHZvaWQKKyAg ICAgIF9NX21vdmVfYXNzaWduKF9TYWZlX2l0ZXJhdG9yJiYgX194KSBub2V4Y2VwdAorICAgICAg ewogCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSghX194Ll9NX3Npbmd1bGFyKCkKIAkJCSAgICAgIHx8 IF9feC5fTV92YWx1ZV9pbml0aWFsaXplZCgpLAogCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19j b3B5X3Npbmd1bGFyKQpAQCAtMzAzLDcgKzMwOSw3IEBAIG5hbWVzcGFjZSBfX2dudV9kZWJ1Zwog CQkJICAgICAgLl9NX2l0ZXJhdG9yKF9feCwgIm90aGVyIikpOwogCiAJaWYgKHN0ZDo6X19hZGRy ZXNzb2YoX194KSA9PSB0aGlzKQotCSAgcmV0dXJuICp0aGlzOworCSAgcmV0dXJuOwogCiAJaWYg KHRoaXMtPl9NX3NlcXVlbmNlICYmIHRoaXMtPl9NX3NlcXVlbmNlID09IF9feC5fTV9zZXF1ZW5j ZSkKIAkgIHsKQEAgLTMyMCw3ICszMjYsNiBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKIAogCV9f eC5fTV9kZXRhY2goKTsKIAlfX3guYmFzZSgpID0gX0l0ZXJhdG9yKCk7Ci0JcmV0dXJuICp0aGlz OwogICAgICAgfQogI2VuZGlmCiAKQEAgLTM3MCwxNyArMzc1LDIwIEBAIG5hbWVzcGFjZSBfX2du dV9kZWJ1ZwogICAgICAgb3BlcmF0b3IrKygpIF9HTElCQ1hYX05PRVhDRVBUCiAgICAgICB7CiAJ aWYgKHN0ZDo6X19pc19jb25zdGFudF9ldmFsdWF0ZWQoKSkKLQkgIHsKLQkgICAgKytiYXNlKCk7 Ci0JICAgIHJldHVybiAqdGhpczsKLQkgIH0KKwkgICsrYmFzZSgpOworCWVsc2UKKwkgIF9NX2lu Y3JlbWVudCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KIAorICAgICAgdm9pZAorICAgICAg X01faW5jcmVtZW50KCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKIAlfR0xJQkNYWF9ERUJV R19WRVJJRlkodGhpcy0+X01faW5jcmVtZW50YWJsZSgpLAogCQkJICAgICAgX01fbWVzc2FnZShf X21zZ19iYWRfaW5jKQogCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpKTsKIAlf X2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgX19sKHRoaXMtPl9NX2dldF9tdXRleCgpKTsKIAkrK2Jh c2UoKTsKLQlyZXR1cm4gKnRoaXM7CiAgICAgICB9CiAKICAgICAgIC8qKgpAQCAtNjg5LDE3ICs2 OTcsMjAgQEAgbmFtZXNwYWNlIF9fZ251X2RlYnVnCiAgICAgICBvcGVyYXRvci0tKCkgX0dMSUJD WFhfTk9FWENFUFQKICAgICAgIHsKIAlpZiAoc3RkOjpfX2lzX2NvbnN0YW50X2V2YWx1YXRlZCgp KQotCSAgewotCSAgICAtLXRoaXMtPmJhc2UoKTsKLQkgICAgcmV0dXJuICp0aGlzOwotCSAgfQor CSAgLS10aGlzLT5iYXNlKCk7CisJZWxzZQorCSAgX01fZGVjcmVtZW50KCk7CisJcmV0dXJuICp0 aGlzOworICAgICAgfQogCisgICAgICB2b2lkCisgICAgICBfTV9kZWNyZW1lbnQoKSBfR0xJQkNY WF9OT0VYQ0VQVAorICAgICAgewogCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9kZWNy ZW1lbnRhYmxlKCksCiAJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2JhZF9kZWMpCiAJCQkgICAg ICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikpOwogCV9fZ251X2N4eDo6X19zY29wZWRfbG9j ayBfX2wodGhpcy0+X01fZ2V0X211dGV4KCkpOwogCS0tdGhpcy0+YmFzZSgpOwotCXJldHVybiAq dGhpczsKICAgICAgIH0KIAogICAgICAgLyoqCg== --000000000000ecad4e060c9d445c--