]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: undeclared identifier in requires-clause [PR99678]
authorPatrick Palka <ppalka@redhat.com>
Thu, 13 Jun 2024 14:16:10 +0000 (10:16 -0400)
committerPatrick Palka <ppalka@redhat.com>
Thu, 13 Jun 2024 14:16:10 +0000 (10:16 -0400)
commitd387ecb2b2f44f33fd6a7c5ec7eadaf6dd70efc9
tree9fdd9fd06015d3708592c277b4107173c3494554
parent83a765768510d1f329887116757d6818d7846717
c++: undeclared identifier in requires-clause [PR99678]

Since the terms of a requires-clause are grammatically primary-expressions
and not e.g. postfix-expressions, it seems we need to explicitly handle
and diagnose the case where a term parses to a bare unresolved identifier,
like cp_parser_postfix_expression does, since cp_parser_primary_expression
leaves that up to its callers.  Otherwise we incorrectly accept the first
three requires-clauses below.

Note that the only occurrences of primary-expression in the grammar are
postfix-expression and constraint-logical-and-expression, so it's not too
surprising that we need this special handling here.

PR c++/99678

gcc/cp/ChangeLog:

* parser.cc (cp_parser_constraint_primary_expression): Diagnose
a bare unresolved unqualified-id.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-requires38.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/parser.cc
gcc/testsuite/g++.dg/cpp2a/concepts-requires38.C [new file with mode: 0644]