[backport from gcc-4.8/trunk r190656, adjusted for different location of c-parser.c ] gcc/ 2012-08-24 Jakub Jelinek PR c/54355 * c-decl.c (c_parser_label): Pass true as nested and fix up comments for nested and empty_ok arguments in the call to c_parser_declaration_or_fndef. gcc/testsuite/ 2012-08-24 Jakub Jelinek PR c/54355 * gcc.dg/pr54355.c: New test. --- gcc-4.6.3/gcc/c-parser.c.~1~ 2012-02-09 18:15:29.000000000 +0100 +++ gcc-4.6.3/gcc/c-parser.c 2012-09-01 14:16:54.000000000 +0200 @@ -4192,7 +4192,7 @@ c_parser_label (c_parser *parser) "a declaration is not a statement"); c_parser_declaration_or_fndef (parser, /*fndef_ok*/ false, /*static_assert_ok*/ true, - /*nested*/ true, /*empty_ok*/ false, + /*empty_ok*/ true, /*nested*/ true, /*start_attr_ok*/ true, NULL); } } --- gcc-4.6.3/gcc/testsuite/gcc.dg/pr54355.c.~1~ 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.6.3/gcc/testsuite/gcc.dg/pr54355.c 2012-09-01 14:16:54.000000000 +0200 @@ -0,0 +1,11 @@ +/* PR c/54355 */ +/* { dg-do compile } */ + +void +foo (int i) +{ + switch (i) + { + case 0: T x > /* { dg-error "(label|unknown type|expected)" } */ + } +} /* { dg-error "expected" } */