diff options
-rw-r--r-- | gcc/cp/parser.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/enum14.C | 7 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 528b41b..9e32a3c 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -19412,7 +19412,12 @@ cp_parser_enum_specifier (cp_parser* parser) "ISO C++ forbids empty unnamed enum"); } else - cp_parser_enumerator_list (parser, type); + { + /* We've seen a '{' so we know we're in an enum-specifier. + Commit to any tentative parse to get syntax errors. */ + cp_parser_commit_to_tentative_parse (parser); + cp_parser_enumerator_list (parser, type); + } /* Consume the final '}'. */ braces.require_close (parser); diff --git a/gcc/testsuite/g++.dg/parse/enum14.C b/gcc/testsuite/g++.dg/parse/enum14.C new file mode 100644 index 0000000..be09cca --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/enum14.C @@ -0,0 +1,7 @@ +// PR c++/96077 + +int main () +{ + enum { E = (2 } e; // { dg-error "expected" } + enum { F = true ? 2 : (3 /* missing ")" here */ } f; // { dg-error "expected" } +} |