aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Maltsev <maltsevm@gmail.com>2017-05-31 13:47:51 +0000
committerMikhail Maltsev <miyuki@gcc.gnu.org>2017-05-31 13:47:51 +0000
commit9fc5e7a4430d16742e4cb910f0dbb26460cee50e (patch)
tree009737cd39726f8f5c9f92652993449744dfcd13
parentafd88efc0530ec39d926c9932e4302cff9a2e526 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/c/gimple-parser.c12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/gimplefe-error-7.c27
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" } */
+