c++: Hard error with tentative parse of declaration [PR88754]
authorPatrick Palka <ppalka@redhat.com>
Thu, 16 Apr 2020 20:45:15 +0000 (16:45 -0400)
committerPatrick Palka <ppalka@redhat.com>
Fri, 17 Apr 2020 17:58:52 +0000 (13:58 -0400)
commit3f5af3f71195b7f1ebe32bd0d695b59904fff778
tree8496bacd99f361bf77fcf1a966edf35a0c2663b3
parent2298af0800b292f028298c1eaec42fd3033c4b9b
c++: Hard error with tentative parse of declaration [PR88754]

In the testcase for this PR, we try to parse the statement

  A(value<0>());

first tentatively as a declaration (with a parenthesized declarator), and during
this tentative parse we end up issuing a hard error from
cp_parser_check_template_parameters about its invalidness as a declaration.

Rather than issuing a hard error, it seems we should instead simulate an error
since we're parsing tentatively.  This would then allow cp_parser_statement to
recover and successfully parse the statement as an expression-statement instead.

gcc/cp/ChangeLog:

PR c++/88754
* parser.c (cp_parser_check_template_parameters): Before issuing a hard
error, first try simulating an error instead.

gcc/testsuite/ChangeLog:

PR c++/88754
* g++.dg/parse/ambig10.C: New test.
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/ambig10.C [new file with mode: 0644]