gcc/c/ChangeLog:

        * c-parser.cc (c_parser_maxof_or_minof_expression): After '('
        has been parsed, if there's a syntax error, skip until ')', to
        minimize excess errors.

gcc/testsuite/ChangeLog:

        * gcc.dg/maxof-compile.c (expr, specs): Update test.

Signed-off-by: Alejandro Colomar <[email protected]>
---
 gcc/c/c-parser.cc                    |  1 +
 gcc/testsuite/gcc.dg/maxof-compile.c | 18 ++++++------------
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
index ef0a89a3e94e..6319b46e129d 100644
--- a/gcc/c/c-parser.cc
+++ b/gcc/c/c-parser.cc
@@ -10954,6 +10954,7 @@ c_parser_maxof_or_minof_expression (c_parser *parser, 
enum rid rid)
   if (!c_token_starts_typename (c_parser_peek_token (parser)))
     {
       error_at (expr_loc, "invalid application of %qs to something not a 
type", op_name);
+      parens.skip_until_found_close (parser);
       goto fail;
     }
   type_name = c_parser_type_name (parser, true);
diff --git a/gcc/testsuite/gcc.dg/maxof-compile.c 
b/gcc/testsuite/gcc.dg/maxof-compile.c
index f32b58e00598..4c072bd0ddb5 100644
--- a/gcc/testsuite/gcc.dg/maxof-compile.c
+++ b/gcc/testsuite/gcc.dg/maxof-compile.c
@@ -75,17 +75,13 @@ expr (void)
   int x;
 
   _Maxof (x);  /* { dg-error "to something not a type" } */
-  /* { dg-error "expected ';'" "syntax error" { target *-*-* } .-1 } */
-  /* { dg-error "expected statement" "syntax error 2" { target *-*-* } .-2 } */
+  /* { dg-error "expected ')'" "syntax error" { target *-*-* } .-1 } */
   _Minof (x);  /* { dg-error "to something not a type" } */
-  /* { dg-error "expected ';'" "syntax error" { target *-*-* } .-1 } */
-  /* { dg-error "expected statement" "syntax error 2" { target *-*-* } .-2 } */
+  /* { dg-error "expected ')'" "syntax error" { target *-*-* } .-1 } */
   _Maxof (1);  /* { dg-error "to something not a type" } */
-  /* { dg-error "expected ';'" "syntax error" { target *-*-* } .-1 } */
-  /* { dg-error "expected statement" "syntax error 2" { target *-*-* } .-2 } */
+  /* { dg-error "expected ')'" "syntax error" { target *-*-* } .-1 } */
   _Minof (1);  /* { dg-error "to something not a type" } */
-  /* { dg-error "expected ';'" "syntax error" { target *-*-* } .-1 } */
-  /* { dg-error "expected statement" "syntax error 2" { target *-*-* } .-2 } */
+  /* { dg-error "expected ')'" "syntax error" { target *-*-* } .-1 } */
   _Maxof 1;  /* { dg-error "expected '('" } */
   _Minof 1;  /* { dg-error "expected '('" } */
   _Maxof (int) {1};  /* { dg-error "expected ';'" } */
@@ -112,11 +108,9 @@ void
 specs (void)
 {
   _Maxof (static int);  /* { dg-error "to something not a type" } */
-  /* { dg-error "expected ';'" "syntax error" { target *-*-* } .-1 } */
-  /* { dg-error "expected statement" "syntax error 2" { target *-*-* } .-2 } */
+  /* { dg-error "expected ')'" "syntax error" { target *-*-* } .-1 } */
   _Minof (static int);  /* { dg-error "to something not a type" } */
-  /* { dg-error "expected ';'" "syntax error" { target *-*-* } .-1 } */
-  /* { dg-error "expected statement" "syntax error 2" { target *-*-* } .-2 } */
+  /* { dg-error "expected ')'" "syntax error" { target *-*-* } .-1 } */
   _Maxof (alignas(8) int);  /* { dg-error "alignment specified" } */
   _Minof (alignas(8) int);  /* { dg-error "alignment specified" } */
 }
-- 
2.51.0

Reply via email to