c++: Diagnose this specifier on template parameters [PR113929]
commit5286b0761b5dfac4348d1c5bfdcc162a66f338ee
authorJakub Jelinek <jakub@redhat.com>
Fri, 16 Feb 2024 16:42:32 +0000 (16 17:42 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 16 Feb 2024 16:42:32 +0000 (16 17:42 +0100)
treea6f84a3e6b61a8113bfacd68cd191e66242411aa
parent945cb8490cbdb558e010878f2fb70f5ef088d7ec
c++: Diagnose this specifier on template parameters [PR113929]

For template parameters, the optional this specifier is in the grammar
template-parameter-list -> template-parameter -> parameter-declaration,
just [dcl.fct/6] says that it is only valid in parameter-list of certain
functions.  So, unlike the case of decl-specifier-seq used in non-terminals
other than parameter-declaration, I think it is better not to fix this
by
   cp_parser_decl_specifier_seq (parser,
-                                flags | CP_PARSER_FLAGS_PARAMETER,
+                                flags | (template_parameter_p ? 0
+                                         : CP_PARSER_FLAGS_PARAMETER),
                                 &decl_specifiers,
                                 &declares_class_or_enum);
which would be pretending it isn't in the grammar, but by diagnosing it
separately, which is what the following patch does.

2024-02-16  Jakub Jelinek  <jakub@redhat.com>

PR c++/113929
* parser.cc (cp_parser_parameter_declaration): Diagnose this specifier
on template parameter declaration.

* g++.dg/parse/pr113929.C: New test.
gcc/cp/parser.cc
gcc/testsuite/g++.dg/parse/pr113929.C [new file with mode: 0644]