Message ID | f922dfd7-f512-e424-faf9-3d819e031878@gmail.com |
---|---|
State | New |
Headers | show |
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 --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" } */ +}