diff mbox

[5/5,GIMPLE,FE] PR testsuite/80580: Handle invalid SSA names

Message ID f922dfd7-f512-e424-faf9-3d819e031878@gmail.com
State New
Headers show

Commit Message

Mikhail Maltsev May 1, 2017, 6:09 p.m. UTC
When parsing SSA names, we should check that parent names are scalars.
In fact, this patch just uses the condition of a 'gcc_assert' in 'make_ssa_name_fn'.

Comments

Richard Biener May 2, 2017, 2:24 p.m. UTC | #1
On Mon, May 1, 2017 at 8:09 PM, Mikhail Maltsev <maltsevm@gmail.com> wrote:
> When parsing SSA names, we should check that parent names are scalars.
> In fact, this patch just uses the condition of a 'gcc_assert' in 'make_ssa_name_fn'.

+         if (!(VAR_P (parent)
+               || TREE_CODE (parent) == PARM_DECL
+               || TREE_CODE (parent) == RESULT_DECL
+               || (TYPE_P (parent) && is_gimple_reg_type (parent))))
+           {
+             error ("invalid SSA name %qE", parent);
+             return error_mark_node;
+           }

please drop || (TYPE_P (parent) && is_gimple_reg_type (parent))), that
case isn't valid.
Please also change wording slightly to "invalid base %qE for SSA name".

Ok with that changes.

Thanks,
Richard.

> --
> Regards,
>    Mikhail Maltsev
>
>
> gcc/testsuite/ChangeLog:
>
> 2017-05-01  Mikhail Maltsev  <maltsevm@gmail.com>
>
>         * gcc.dg/gimplefe-error-11.c: New test.
>
>
> gcc/c/ChangeLog:
>
> 2017-05-01  Mikhail Maltsev  <maltsevm@gmail.com>
>
>         * gimple-parser.c (c_parser_parse_ssa_name): Validate SSA name base.
>
>
diff mbox

Patch

diff --git a/gcc/c/gimple-parser.c b/gcc/c/gimple-parser.c
index f3af840..ac8e7a7 100644
--- a/gcc/c/gimple-parser.c
+++ b/gcc/c/gimple-parser.c
@@ -692,6 +692,14 @@  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
+		|| (TYPE_P (parent) && is_gimple_reg_type (parent))))
+	    {
+	      error ("invalid SSA name %qE", 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;
diff --git a/gcc/testsuite/gcc.dg/gimplefe-error-11.c b/gcc/testsuite/gcc.dg/gimplefe-error-11.c
new file mode 100644
index 0000000..c73b85c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gimplefe-error-11.c
@@ -0,0 +1,9 @@ 
+/* { dg-do compile } */
+/* { dg-options "-fgimple" } */
+
+void a(int);
+
+__GIMPLE() void b()
+{
+  a_2 = 0; /* { dg-error "invalid" } */
+}