diff options
author | manu <manu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-11-03 19:41:20 +0000 |
---|---|---|
committer | manu <manu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-11-03 19:41:20 +0000 |
commit | ce53604aa79a9218d85c2041a800bd6e98f15218 (patch) | |
tree | 7bc7dbed0e4fd908371d348e8825c159f47093f4 /gcc/c-parser.c | |
parent | 238655ad9fa3d42fa74b87455a42b7c9140ccd6f (diff) | |
download | gcc-ce53604aa79a9218d85c2041a800bd6e98f15218.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129873 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-parser.c')
-rw-r--r-- | gcc/c-parser.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 29148266f9a..322f600e65d 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 %<;%>"); |