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 eeba2f45be92..a9a7acaea04b 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