From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2153) id C9E27388A837; Tue, 20 Apr 2021 23:30:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C9E27388A837 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jakub Jelinek To: gcc-cvs@gcc.gnu.org Subject: [gcc r9-9392] c++: Don't try to parse a function declaration as deduction guide [PR97663] X-Act-Checkin: gcc X-Git-Author: Jakub Jelinek X-Git-Refname: refs/heads/releases/gcc-9 X-Git-Oldrev: 0fbe916a1e4630ef706946f949759c3c0813cf16 X-Git-Newrev: c3a583316776a399fea9eb79019245138a2be181 Message-Id: <20210420233000.C9E27388A837@sourceware.org> Date: Tue, 20 Apr 2021 23:30:00 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Apr 2021 23:30:00 -0000 https://gcc.gnu.org/g:c3a583316776a399fea9eb79019245138a2be181 commit r9-9392-gc3a583316776a399fea9eb79019245138a2be181 Author: Jakub Jelinek Date: Tue Nov 3 21:42:51 2020 +0100 c++: Don't try to parse a function declaration as deduction guide [PR97663] While these function declarations have NULL decl_specifiers->type, they have still type specifiers specified from which the default int in the return type is added, so we shouldn't try to parse those as deduction guides. 2020-11-03 Jakub Jelinek PR c++/97663 * parser.c (cp_parser_init_declarator): Don't try to parse C++17 deduction guides if there are any type specifiers even when type is NULL. * g++.dg/cpp1z/class-deduction75.C: New test. (cherry picked from commit cd41e4a1864c10c7f9141284e82e5cc0a3007806) Diff: --- gcc/cp/parser.c | 1 + gcc/testsuite/g++.dg/cpp1z/class-deduction75.C | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 58274a3a8c3..64dde058dd3 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -20269,6 +20269,7 @@ cp_parser_init_declarator (cp_parser* parser, { /* Handle C++17 deduction guides. */ if (!decl_specifiers->type + && !decl_specifiers->any_type_specifiers_p && ctor_dtor_or_conv_p <= 0 && cxx_dialect >= cxx17) { diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction75.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction75.C new file mode 100644 index 00000000000..52e6131c7b5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction75.C @@ -0,0 +1,15 @@ +// PR c++/97663 + +template struct foo {}; +template struct bar {}; +template struct baz {}; +template struct qux {}; +template struct corge {}; + +namespace N { + unsigned foo (); + signed bar (); + long baz (); + long long qux (); + short corge (); +}