From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by sourceware.org (Postfix) with ESMTPS id 2BC1E3858D28 for ; Fri, 22 Sep 2023 17:15:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2BC1E3858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-31ff1f3cde5so2195196f8f.2 for ; Fri, 22 Sep 2023 10:15:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695402931; x=1696007731; darn=gcc.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=/xe+6uhh5lXbD9Vhp9gqRc82qKFwaAQofSU2u2Iq/Ag=; b=fsrfxbVkRAXxelmmLTdaaOWtaWeYUhSUo8TFX1EdDxSOKySYqolKBjQh/XWgEIW0v8 8k3AFu6d+utNrt4ls4NSbxGeyldPfdKP/IdMOouIoATAVrQB7L8GI+JQFgUOkJsqEaCe l1ew1I0c2i5jR21mXQpCN9XHzCunDKVnG+xuHtBaFmHlK3gy++4+TOQK+3qaxnlKSzQb pMkyiYtAFHvZy9U4eRTkj8ABAJ31wmlm/20lgI+H7mOKg9+0UTQ8TpKZCbsWe0g3ydVc Dvg5HgFJyIg5W/LjMrXv1FHF/fI7rJ48wFxWt5cPglBYF/XnGHfpMoCO0tVXdk4FjKr2 08yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695402931; x=1696007731; h=content-transfer-encoding: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=/xe+6uhh5lXbD9Vhp9gqRc82qKFwaAQofSU2u2Iq/Ag=; b=JQBFAQSLdCmg4iUU4rulIDgztc3bWDPILi2u+EpW8/I4Wr23V8++oxxWEM65Yixg33 eNyo0ZIA5veVetCw3sRh+emFABFxC++LqTOTJL5ieO5p6GKDKnq3jkvoLfnmOwJbI27y ZhprS7bSrWyrL5VK7QAOAOJqMpEf0YQqlNFzFQpDWf9p4I6VkFYJcpLBe1pcuZ776EkE XiEyNHoZG2i7cleSUccmru5/5oxGT1KnvusnGM1d5kH+g8ze7eM5+mj6dw/TMCjeo37q huG4f4zfb94vvpROmVUib/dEHyVx/+BumPESB++wesKgt8VpmKwP+yNb4TllXmuljADY QwHg== X-Gm-Message-State: AOJu0YwiV0PGG86Cv/2zn1JhHg8i+0oQ1FFT+Jp1b/m+wqJxab4OXKzi kYim6Jq+bZLNqlhGehXLneNmogYiXTvEwWwCkNU= X-Google-Smtp-Source: AGHT+IFnjtZVWhrkYybU7jBwt6q+WBvKGIdW6Z0b0b4fwl5HwXqdCRoJ/a+AVqeJ6SGdmbMGpdQm3Fe0Vp2jWF2lZOQ= X-Received: by 2002:a5d:4dc3:0:b0:31f:fc6c:8b75 with SMTP id f3-20020a5d4dc3000000b0031ffc6c8b75mr273218wru.7.1695402930604; Fri, 22 Sep 2023 10:15:30 -0700 (PDT) MIME-Version: 1.0 References: <20230922130047.258143-1-jason@redhat.com> In-Reply-To: <20230922130047.258143-1-jason@redhat.com> From: Andrew Pinski Date: Fri, 22 Sep 2023 10:15:18 -0700 Message-ID: Subject: Re: [pushed] c++: unroll pragma in templates [PR111529] To: Jason Merrill Cc: gcc-patches@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-8.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP 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: On Fri, Sep 22, 2023 at 6:01=E2=80=AFAM Jason Merrill wr= ote: > > Tested x86_64-pc-linux-gnu, applying to trunk. > > -- 8< -- > > We were failing to handle ANNOTATE_EXPR in tsubst_copy_and_build, leading= to > problems with substitution of any wrapped expressions. > > Let's also not tell users that lambda templates are available in C++14. This part of the patch fixes https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D108026 . > > PR c++/111529 > > gcc/cp/ChangeLog: > > * parser.cc (cp_parser_lambda_declarator_opt): Don't suggest > -std=3Dc++14 for lambda templates. > * pt.cc (tsubst_expr): Move ANNOTATE_EXPR handling... > (tsubst_copy_and_build): ...here. > > gcc/testsuite/ChangeLog: > > * g++.dg/ext/unroll-4.C: New test. > --- > gcc/cp/parser.cc | 7 ++----- > gcc/cp/pt.cc | 14 +++++++------- > gcc/testsuite/g++.dg/ext/unroll-4.C | 16 ++++++++++++++++ > 3 files changed, 25 insertions(+), 12 deletions(-) > create mode 100644 gcc/testsuite/g++.dg/ext/unroll-4.C > > diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc > index 0e1cbbfe051..f3abae716fe 100644 > --- a/gcc/cp/parser.cc > +++ b/gcc/cp/parser.cc > @@ -11695,11 +11695,8 @@ cp_parser_lambda_declarator_opt (cp_parser* pars= er, tree lambda_expr) > an opening angle if present. */ > if (cp_lexer_next_token_is (parser->lexer, CPP_LESS)) > { > - if (cxx_dialect < cxx14) > - pedwarn (parser->lexer->next_token->location, OPT_Wc__14_extensio= ns, > - "lambda templates are only available with " > - "%<-std=3Dc++14%> or %<-std=3Dgnu++14%>"); > - else if (pedantic && cxx_dialect < cxx20) > + if (cxx_dialect < cxx20 > + && (pedantic || cxx_dialect < cxx14)) > pedwarn (parser->lexer->next_token->location, OPT_Wc__20_extensio= ns, > "lambda templates are only available with " > "%<-std=3Dc++20%> or %<-std=3Dgnu++20%>"); > diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc > index 9b100e12a23..ea5379098a5 100644 > --- a/gcc/cp/pt.cc > +++ b/gcc/cp/pt.cc > @@ -19913,13 +19913,6 @@ tsubst_expr (tree t, tree args, tsubst_flags_t c= omplain, tree in_decl) > templated_operator_saved_lookups (t), > complain)); > > - case ANNOTATE_EXPR: > - tmp =3D RECUR (TREE_OPERAND (t, 0)); > - RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR, > - TREE_TYPE (tmp), tmp, > - RECUR (TREE_OPERAND (t, 1)), > - RECUR (TREE_OPERAND (t, 2)))); > - > case PREDICT_EXPR: > RETURN (add_stmt (copy_node (t))); > > @@ -21868,6 +21861,13 @@ tsubst_copy_and_build (tree t, > RETURN (op); > } > > + case ANNOTATE_EXPR: > + op1 =3D RECUR (TREE_OPERAND (t, 0)); > + RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR, > + TREE_TYPE (op1), op1, > + RECUR (TREE_OPERAND (t, 1)), > + RECUR (TREE_OPERAND (t, 2)))); > + > default: > /* Handle Objective-C++ constructs, if appropriate. */ > { > diff --git a/gcc/testsuite/g++.dg/ext/unroll-4.C b/gcc/testsuite/g++.dg/e= xt/unroll-4.C > new file mode 100644 > index 00000000000..d488aca974e > --- /dev/null > +++ b/gcc/testsuite/g++.dg/ext/unroll-4.C > @@ -0,0 +1,16 @@ > +// PR c++/111529 > +// { dg-do compile { target c++11 } } > +// { dg-additional-options -Wno-c++20-extensions } > + > +template > +void f() { > + []() { > + #pragma GCC unroll 9 > + for (int i =3D 1; i; --i) { > + } > + }; > +} > + > +int main() { > + f<0>(); > +} > > base-commit: 4c496020764057453415f1ae599950724ec0e871 > -- > 2.39.3 >