aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/parser.c7
-rw-r--r--gcc/testsuite/g++.dg/parse/enum14.C7
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" }
+}