PR c++/60391 * parser.c (cp_parser_skip_to_end_of_block_or_statement): Unwind generic function scope as per cp_parser_skip_to_end_of_statement.
PR c++/60391 * g++.dg/cpp1y/pr60391.C: New testcase. --- gcc/cp/parser.c | 4 ++++ gcc/testsuite/g++.dg/cpp1y/pr60391.C | 9 +++++++++ 2 files changed, 13 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp1y/pr60391.C diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 64583ba..a01f204 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -3225,6 +3225,10 @@ cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser) { int nesting_depth = 0; + /* Unwind generic function template scope if necessary. */ + if (parser->fully_implicit_function_template_p) + finish_fully_implicit_template (parser, /*member_decl_opt=*/0); + while (nesting_depth >= 0) { cp_token *token = cp_lexer_peek_token (parser->lexer); diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60391.C b/gcc/testsuite/g++.dg/cpp1y/pr60391.C new file mode 100644 index 0000000..81bf703 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr60391.C @@ -0,0 +1,9 @@ +// PR c++/60391 +// { dg-options -std=c++1y } + +namespace N +{ + int operator"" _X(auto) {} // { dg-error "invalid" } +} + +namespace N {} -- 1.9.0