GIMPLEFE: Handle invalid SSA names
authorMikhail Maltsev <maltsevm@gmail.com>
Thu, 11 May 2017 12:27:37 +0000 (12:27 +0000)
committerMikhail Maltsev <miyuki@gcc.gnu.org>
Thu, 11 May 2017 12:27:37 +0000 (12:27 +0000)
gcc/testsuite/

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

gcc/c/

PR testsuite/80580
* gimple-parser.c (c_parser_parse_ssa_name): Validate SSA name base.

From-SVN: r247903

gcc/c/ChangeLog
gcc/c/gimple-parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/gimplefe-error-6.c [new file with mode: 0644]

index 3bf4db2..69b1ac3 100644 (file)
@@ -1,6 +1,11 @@
 2017-05-11  Mikhail Maltsev  <maltsevm@gmail.com>
 
        PR testsuite/80580
+       * gimple-parser.c (c_parser_parse_ssa_name): Validate SSA name base.
+
+2017-05-11  Mikhail Maltsev  <maltsevm@gmail.com>
+
+       PR testsuite/80580
        * gimple-parser.c (c_parser_gimple_postfix_expression): Handle
        incorrect __MEM syntax.
 
index c0858b7..ed9e7c5 100644 (file)
@@ -692,6 +692,13 @@ c_parser_parse_ssa_name (c_parser *parser,
              c_parser_error (parser, "base variable or SSA name undeclared"); 
              return error_mark_node;
            }
+         if (!(VAR_P (parent)
+               || TREE_CODE (parent) == PARM_DECL
+               || TREE_CODE (parent) == RESULT_DECL))
+           {
+             error ("invalid base %qE for SSA name", parent);
+             return error_mark_node;
+           }
          if (VECTOR_TYPE_P (TREE_TYPE (parent))
              || TREE_CODE (TREE_TYPE (parent)) == COMPLEX_TYPE)
            DECL_GIMPLE_REG_P (parent) = 1;
index 393d880..2b5f6ac 100644 (file)
@@ -1,6 +1,11 @@
 2017-05-11  Mikhail Maltsev  <maltsevm@gmail.com>
 
        PR testsuite/80580
+       * gcc.dg/gimplefe-error-6.c: New test.
+
+2017-05-11  Mikhail Maltsev  <maltsevm@gmail.com>
+
+       PR testsuite/80580
        * gcc.dg/gimplefe-error-5.c: New test.
 
 2017-05-11  Mikhail Maltsev  <maltsevm@gmail.com>
diff --git a/gcc/testsuite/gcc.dg/gimplefe-error-6.c b/gcc/testsuite/gcc.dg/gimplefe-error-6.c
new file mode 100644 (file)
index 0000000..c73b85c
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-fgimple" } */
+
+void a(int);
+
+__GIMPLE() void b()
+{
+  a_2 = 0; /* { dg-error "invalid" } */
+}