From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2122) id 89E293857814; Wed, 15 Sep 2021 04:05:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 89E293857814 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jason Merrill To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-3536] c++: tweak C++20 destructor template-id rule X-Act-Checkin: gcc X-Git-Author: Jason Merrill X-Git-Refname: refs/heads/master X-Git-Oldrev: 4633d623d7c112a8e239b84b2d85caaef02d316c X-Git-Newrev: f53a89fe722958d29fded71b444ff0f09b57b2c4 Message-Id: <20210915040540.89E293857814@sourceware.org> Date: Wed, 15 Sep 2021 04:05:40 +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: Wed, 15 Sep 2021 04:05:40 -0000 https://gcc.gnu.org/g:f53a89fe722958d29fded71b444ff0f09b57b2c4 commit r12-3536-gf53a89fe722958d29fded71b444ff0f09b57b2c4 Author: Jason Merrill Date: Mon Sep 13 16:45:42 2021 -0400 c++: tweak C++20 destructor template-id rule While working on a larger change to destructor lookup I noticed that this rule talks about declarators, but we weren't limiting the error to the case where we're parsing a declarator. I don't know if this actually broke anything, since a CPP_TEMPLATE_ID would have to have been parsed once before, but it's more correct this way. gcc/cp/ChangeLog: * parser.c (cp_parser_unqualified_id): Only complain about ~A in a declarator. Diff: --- gcc/cp/parser.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index e44c5c6b57c..ab1dc81b997 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -6379,7 +6379,8 @@ cp_parser_unqualified_id (cp_parser* parser, /* DR 2237 (C++20 only): A simple-template-id is no longer valid as the declarator-id of a constructor or destructor. */ - if (token->type == CPP_TEMPLATE_ID && cxx_dialect >= cxx20) + if (token->type == CPP_TEMPLATE_ID && declarator_p + && cxx_dialect >= cxx20) { if (!cp_parser_simulate_error (parser)) error_at (tilde_loc, "template-id not allowed for destructor");