diff options
author | Mikhail Maltsev <maltsevm@gmail.com> | 2017-05-31 13:47:51 +0000 |
---|---|---|
committer | Mikhail Maltsev <miyuki@gcc.gnu.org> | 2017-05-31 13:47:51 +0000 |
commit | 9fc5e7a4430d16742e4cb910f0dbb26460cee50e (patch) | |
tree | 009737cd39726f8f5c9f92652993449744dfcd13 | |
parent | afd88efc0530ec39d926c9932e4302cff9a2e526 (diff) | |
download | gcc-9fc5e7a4430d16742e4cb910f0dbb26460cee50e.zip gcc-9fc5e7a4430d16742e4cb910f0dbb26460cee50e.tar.gz gcc-9fc5e7a4430d16742e4cb910f0dbb26460cee50e.tar.bz2 |
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
-rw-r--r-- | gcc/c/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c/gimple-parser.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gimplefe-error-7.c | 27 |
4 files changed, 48 insertions, 1 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 2fa3984..c53a4bf 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -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 ** diff --git a/gcc/c/gimple-parser.c b/gcc/c/gimple-parser.c index 06f2fdb..fb9a543 100644 --- a/gcc/c/gimple-parser.c +++ b/gcc/c/gimple-parser.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fa0bbef..d126dc1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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. diff --git a/gcc/testsuite/gcc.dg/gimplefe-error-7.c b/gcc/testsuite/gcc.dg/gimplefe-error-7.c new file mode 100644 index 0000000..7d5ff37 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gimplefe-error-7.c @@ -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" } */ + |