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 06AAF3858022 for ; Thu, 6 Jan 2022 15:00:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 06AAF3858022 Received: from mail-yb1-f200.google.com (mail-yb1-f200.google.com [209.85.219.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-428-yERcGxK4PNCxwBA6kevuaQ-1; Thu, 06 Jan 2022 10:00:00 -0500 X-MC-Unique: yERcGxK4PNCxwBA6kevuaQ-1 Received: by mail-yb1-f200.google.com with SMTP id p140-20020a257492000000b0060dbb88d8abso5390766ybc.15 for ; Thu, 06 Jan 2022 07:00:00 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=67wuJb1h3BifaOB3IU8cUo4iYpKk6D8AqMo15hsx73A=; b=bkCSCdibgdCKFpPszNDsEw1LbhAm2QE3sewA/wLhKsi4lqmM/pSyVGXULiuC1YcXEt OGQ6KDqS3aBI1x6K3GmzPEiDPgwbOdnRZTf8jvSLSE7JD6rbfvrx2MeVBl+aQiq7hSC8 NSUiqNWKolwRsGQuA818QnaZMJwKE4VnAfacTLaWWHnY/Cve0zSv3SYkApeWf9ent0Ck g739TmxmTXBaItZEvZ3OHdLh+FXOlZ1hS/sHBusD2nRUK05ZFJgSqasanVFD0H3tZlh5 zgKKRl+mSTEazaCjCTGnXwE8Th8a1ifdDlzQ03N9dAdaL6YBEVngVrAQKwxk6FGfCQ9W VGOg== X-Gm-Message-State: AOAM533CMIRDTneA60fKV65sVEMtPwJ1TpRcAVNZPwzBLP63nDliLtET 9fl5LQlTQ2ycbdJ455VZlu2C5DiNhiX/AgWV5wyLT/VPa9zbGlAT745e93Zkgnjs2dmWkwvGy8D Vq/2x8wG1Xj+7nhFJVF2rlVheYdO/cUc= X-Received: by 2002:a25:d696:: with SMTP id n144mr57496059ybg.13.1641481200214; Thu, 06 Jan 2022 07:00:00 -0800 (PST) X-Google-Smtp-Source: ABdhPJw9tJeeIe8GiFPxFtV241S7Z2e7HY3NCbfzQYMbh1W02EESIptWS5rYYK8YQxkLbpBjzAPjWtvvrlogDYZSl0c= X-Received: by 2002:a25:d696:: with SMTP id n144mr57496032ybg.13.1641481199976; Thu, 06 Jan 2022 06:59:59 -0800 (PST) MIME-Version: 1.0 References: <20220105134759.1639818-1-jwakely@redhat.com> <4010f9a9-bff0-c310-b6d6-ef3008a03fa5@redhat.com> In-Reply-To: From: Jonathan Wakely Date: Thu, 6 Jan 2022 14:59:48 +0000 Message-ID: Subject: Re: [committed] libstdc++: Reduce template instantiations in To: Stephan Bergmann Cc: "libstdc++" , gcc Patches X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000d4bb2205d4eb1f9d" X-Spam-Status: No, score=-13.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, HTML_MESSAGE, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Jan 2022 15:00:07 -0000 --000000000000d4bb2205d4eb1f9d Content-Type: text/plain; charset="UTF-8" On Thu, 6 Jan 2022 at 10:43, Jonathan Wakely wrote: > > > On Thu, 6 Jan 2022 at 10:33, Jonathan Wakely wrote: > >> >> >> On Thu, 6 Jan 2022 at 10:00, Stephan Bergmann >> wrote: >> >>> On 05/01/2022 14:47, Jonathan Wakely via Libstdc++ wrote: >>> > Tested powerpc64le-linux, pushed to trunk. >>> > >>> > >>> > This moves the last two template parameters of __regex_algo_impl to be >>> > runtime function parameters instead, so that we don't need four >>> > different instantiations for the possible ways to call it. Most of the >>> > function (and what it instantiates) is the same in all cases, so making >>> > them compile-time choices doesn't really have much benefit. >>> > >>> > Use 'if constexpr' for conditions that check template parameters, so >>> > that when we do depend on a compile-time condition we only instantiate >>> > what we need to. >>> > >>> > libstdc++-v3/ChangeLog: >>> > >>> > * include/bits/regex.h (__regex_algo_impl): Change __policy and >>> > __match_mode template parameters to be function parameters. >>> > (regex_match, regex_search): Pass policy and match mode as >>> > function arguments. >>> > * include/bits/regex.tcc (__regex_algo_impl): Change template >>> > parameters to function parameters. >>> > * include/bits/regex_compiler.h (_RegexTranslatorBase): Use >>> > 'if constexpr' for conditions using template parameters. >>> > (_RegexTranslator): Likewise. >>> > * include/bits/regex_executor.tcc (_Executor::_M_handle_accept): >>> > Likewise. >>> > * testsuite/util/testsuite_regex.h (regex_match_debug) >>> > (regex_search_debug): Move template arguments to function >>> > arguments. >>> > --- >>> > libstdc++-v3/include/bits/regex.h | 33 >>> +++++++++---------- >>> > libstdc++-v3/include/bits/regex.tcc | 8 ++--- >>> > libstdc++-v3/include/bits/regex_compiler.h | 9 ++--- >>> > libstdc++-v3/include/bits/regex_executor.tcc | 2 +- >>> > libstdc++-v3/testsuite/util/testsuite_regex.h | 24 +++++++------- >>> > 5 files changed, 37 insertions(+), 39 deletions(-) >>> >>> Clang now fails #include with >>> >>> > In file included from >>> gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/12.0.0/../../../../include/c++/12.0.0/regex:66: >>> > >>> gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/regex.h:799:9: >>> error: unknown type name '_RegexExecutorPolicy'; did you mean >>> '__detail::_RegexExecutorPolicy'? >>> > _RegexExecutorPolicy, bool); >>> > ^ >>> > >>> gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/regex.h:45:14: >>> note: '__detail::_RegexExecutorPolicy' declared here >>> > enum class _RegexExecutorPolicy : int { _S_auto, _S_alternate }; >>> > ^ >>> > >>> gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/regex.h:2070:9: >>> error: unknown type name '_RegexExecutorPolicy'; did you mean >>> '__detail::_RegexExecutorPolicy'? >>> > _RegexExecutorPolicy, bool); >>> > ^ >>> > >>> gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/regex.h:45:14: >>> note: '__detail::_RegexExecutorPolicy' declared here >>> > enum class _RegexExecutorPolicy : int { _S_auto, _S_alternate }; >>> > ^ >>> >>> and >>> >>> > diff --git a/libstdc++-v3/include/bits/regex.h >>> b/libstdc++-v3/include/bits/regex.h >>> > index 7480b0a5f97..46c168010bf 100644 >>> > --- a/libstdc++-v3/include/bits/regex.h >>> > +++ b/libstdc++-v3/include/bits/regex.h >>> > @@ -796,7 +796,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 >>> > __detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&, >>> > const basic_regex<_Cp, _Rp>&, >>> > regex_constants::match_flag_type, >>> > - _RegexExecutorPolicy, bool); >>> > + __detail::_RegexExecutorPolicy, >>> bool); >>> > >>> > template >>> > friend class __detail::_Executor; >>> > @@ -2067,7 +2067,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 >>> > __detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&, >>> > const basic_regex<_Cp, _Rp>&, >>> > regex_constants::match_flag_type, >>> > - _RegexExecutorPolicy, bool); >>> > + __detail::_RegexExecutorPolicy, >>> bool); >>> > >>> > // Reset contents to __size unmatched sub_match objects >>> > // (plus additional objects for prefix, suffix and unmatched >>> sub). >>> >>> would fix that. >>> >> >> >> I'll make the change, but this looks like a clang bug: >> https://godbolt.org/z/bozxYErrc >> > > Maybe this one: https://github.com/llvm/llvm-project/issues/38230 > I've pushed the fix now, thanks for the report. --000000000000d4bb2205d4eb1f9d 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_ky33im6i0 Y29tbWl0IGVjMTJkZGQxZTdmN2Q2YjQ4YTU5M2RmODY1ZTc4NDYwMzllN2Q2MmUKQXV0aG9yOiBK b25hdGhhbiBXYWtlbHkgPGp3YWtlbHlAcmVkaGF0LmNvbT4KRGF0ZTogICBUaHUgSmFuIDYgMTE6 MTE6NTIgMjAyMgoKICAgIGxpYnN0ZGMrKzogQWRqdXN0IGZyaWVuZCBkZWNsYXJhdGlvbnMgdG8g d29yayB3aXRoIENsYW5nCiAgICAKICAgIEkgdGhpbmsgdGhpcyBjb2RlIGlzIHZhbGlkIGJ1dCBp dCBmYWlscyB3aXRoIENsYW5nLCBwb3NzaWJseSBkdWUgdG8KICAgIGh0dHBzOi8vbGx2bS5vcmcv UFIzODg4MgogICAgCiAgICBRdWFsaWZ5aW5nIHRoZSBuYW1lcyBtYWtlcyBpdCB3b3JrIGZvciBh bGwgY29tcGlsZXJzLgogICAgCiAgICBsaWJzdGRjKystdjMvQ2hhbmdlTG9nOgogICAgCiAgICAg ICAgICAgICogaW5jbHVkZS9iaXRzL3JlZ2V4LmggKGJhc2ljX3JlZ2V4LCBtYXRjaF9yZXN1bHRz KTogUXVhbGlmeQogICAgICAgICAgICBuYW1lIGluIGZyaWVuZCBkZWNsYXJhdGlvbiwgdG8gd29y ayBhcm91bmQgQ2xhbmcgYnVnLgoKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Jp dHMvcmVnZXguaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvcmVnZXguaAppbmRleCA3NDgw YjBhNWY5Ny4uNDZjMTY4MDEwYmYgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Jp dHMvcmVnZXguaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3JlZ2V4LmgKQEAgLTc5 Niw3ICs3OTYsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ1hYMTEKIAlfX2RldGFpbDo6 X19yZWdleF9hbGdvX2ltcGwoX0JwLCBfQnAsIG1hdGNoX3Jlc3VsdHM8X0JwLCBfQXA+JiwKIAkJ CQkgICAgY29uc3QgYmFzaWNfcmVnZXg8X0NwLCBfUnA+JiwKIAkJCQkgICAgcmVnZXhfY29uc3Rh bnRzOjptYXRjaF9mbGFnX3R5cGUsCi0JCQkJICAgIF9SZWdleEV4ZWN1dG9yUG9saWN5LCBib29s KTsKKwkJCQkgICAgX19kZXRhaWw6Ol9SZWdleEV4ZWN1dG9yUG9saWN5LCBib29sKTsKIAogICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZSwgYm9vbD4KIAlmcmllbmQg Y2xhc3MgX19kZXRhaWw6Ol9FeGVjdXRvcjsKQEAgLTIwNjcsNyArMjA2Nyw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9DWFgxMQogCV9fZGV0YWlsOjpfX3JlZ2V4X2FsZ29faW1wbChfQnAs IF9CcCwgbWF0Y2hfcmVzdWx0czxfQnAsIF9BcD4mLAogCQkJCSAgICBjb25zdCBiYXNpY19yZWdl eDxfQ3AsIF9ScD4mLAogCQkJCSAgICByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSwK LQkJCQkgICAgX1JlZ2V4RXhlY3V0b3JQb2xpY3ksIGJvb2wpOworCQkJCSAgICBfX2RldGFpbDo6 X1JlZ2V4RXhlY3V0b3JQb2xpY3ksIGJvb2wpOwogCiAgICAgICAvLyBSZXNldCBjb250ZW50cyB0 byBfX3NpemUgdW5tYXRjaGVkIHN1Yl9tYXRjaCBvYmplY3RzCiAgICAgICAvLyAocGx1cyBhZGRp dGlvbmFsIG9iamVjdHMgZm9yIHByZWZpeCwgc3VmZml4IGFuZCB1bm1hdGNoZWQgc3ViKS4K --000000000000d4bb2205d4eb1f9d--