aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-parser.c
diff options
context:
space:
mode:
authorManuel López-Ibáñez <manu@gcc.gnu.org>2007-11-03 19:41:20 +0000
committerManuel López-Ibáñez <manu@gcc.gnu.org>2007-11-03 19:41:20 +0000
commit847c8ce4d147f2de0d99b517f7557f804e592867 (patch)
tree7bc7dbed0e4fd908371d348e8825c159f47093f4 /gcc/c-parser.c
parent47c95bff6b78a2f8e632714172f1ba004d449cca (diff)
downloadgcc-847c8ce4d147f2de0d99b517f7557f804e592867.zip
gcc-847c8ce4d147f2de0d99b517f7557f804e592867.tar.gz
gcc-847c8ce4d147f2de0d99b517f7557f804e592867.tar.bz2
re PR c/29062 (unclear diagnostic for declaration after label)
2007-11-03 Manuel Lopez-Ibanez <manu@gcc.gnu.org> PR c/29062 * c-parser.c (c_parser_statement_after_labels): Error if a declaration is parsed after a label. testsuite/ * gcc.dg/20031223-1.c: Adjust error output. * gcc.dg/parse-decl-after-label.c: New. From-SVN: r129873
Diffstat (limited to 'gcc/c-parser.c')
-rw-r--r--gcc/c-parser.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/c-parser.c b/gcc/c-parser.c
index 2914826..322f600 100644
--- a/gcc/c-parser.c
+++ b/gcc/c-parser.c
@@ -3811,6 +3811,14 @@ c_parser_statement_after_labels (c_parser *parser)
break;
default:
expr_stmt:
+ if (c_parser_next_token_starts_declspecs (parser))
+ {
+ error ("a label can only be part of a statement and a declaration is not a statement");
+ c_parser_declaration_or_fndef (parser, /*fndef_ok*/ false,
+ /*nested*/ true, /*empty_ok*/ false,
+ /*start_attr_ok*/ true);
+ return;
+ }
stmt = c_finish_expr_stmt (c_parser_expression_conv (parser).value);
expect_semicolon:
c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");