GIMPLEFE: Handle missing labels in goto statements

gcc/c/

	PR testsuite/80580
	* gimple-parser.c (c_parser_gimple_if_stmt): Check for empty labels.

gcc/testsuite/

	PR testsuite/80580
	* gcc.dg/gimplefe-error-7.c: New test.

From-SVN: r248738
This commit is contained in:
Mikhail Maltsev 2017-05-31 13:47:51 +00:00 committed by Mikhail Maltsev
parent afd88efc05
commit 9fc5e7a443
4 changed files with 48 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2017-05-31 Mikhail Maltsev <maltsevm@gmail.com>
PR testsuite/80580
* gimple-parser.c (c_parser_gimple_if_stmt): Check for empty labels.
2017-05-30 David Malcolm <dmalcolm@redhat.com>
* c-objc-common.c (c_tree_printer): Gain bool and const char **

View file

@ -1335,9 +1335,14 @@ c_parser_gimple_if_stmt (c_parser *parser, gimple_seq *seq)
{
loc = c_parser_peek_token (parser)->location;
c_parser_consume_token (parser);
if (! c_parser_next_token_is (parser, CPP_NAME))
{
c_parser_error (parser, "expected label");
return;
}
label = c_parser_peek_token (parser)->value;
t_label = lookup_label_for_goto (loc, label);
c_parser_consume_token (parser);
t_label = lookup_label_for_goto (loc, label);
if (! c_parser_require (parser, CPP_SEMICOLON, "expected %<;%>"))
return;
}
@ -1359,6 +1364,11 @@ c_parser_gimple_if_stmt (c_parser *parser, gimple_seq *seq)
{
loc = c_parser_peek_token (parser)->location;
c_parser_consume_token (parser);
if (! c_parser_next_token_is (parser, CPP_NAME))
{
c_parser_error (parser, "expected label");
return;
}
label = c_parser_peek_token (parser)->value;
f_label = lookup_label_for_goto (loc, label);
c_parser_consume_token (parser);

View file

@ -1,3 +1,8 @@
2017-05-31 Mikhail Maltsev <maltsevm@gmail.com>
PR testsuite/80580
* gcc.dg/gimplefe-error-7.c: New test.
2017-05-31 Graham Markall <graham.markall@embecosm.com>
* gcc.target/arc/add_n-combine.c: New test.

View file

@ -0,0 +1,27 @@
/* { dg-do compile } */
/* { dg-options "-fgimple" } */
__GIMPLE() void fn1()
{
if (1)
goto
else /* { dg-error "expected label" } */
goto lbl;
}
__GIMPLE() void fn2()
{
if (1)
goto lbl;
else
goto ; /* { dg-error "expected label" } */
}
__GIMPLE() void fn3()
{
if (1)
goto lbl;
else
goto
} /* { dg-error "expected label" } */