Commit a6bf99f0 by Martin Jambor Committed by Martin Jambor

Verify that context of local DECLs is the current function

2016-04-28  Martin Jambor  <mjambor@suse.cz>

	* tree-cfg.c (verify_expr): Verify that local declarations belong to
	this function.  Call verify_expr on MEM_REFs and bases of other
	handled_components.

From-SVN: r235570
parent 208b85bb
2016-04-28 Martin Jambor <mjambor@suse.cz>
* tree-cfg.c (verify_expr): Verify that local declarations belong to
this function. Call verify_expr on MEM_REFs and bases of other
handled_components.
2016-04-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* internal-fn.c (expand_arith_overflow): Convert preprocessor check
......
......@@ -2834,6 +2834,22 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
}
break;
case PARM_DECL:
case VAR_DECL:
case RESULT_DECL:
{
tree context = decl_function_context (t);
if (context != cfun->decl
&& !SCOPE_FILE_SCOPE_P (context)
&& !TREE_STATIC (t)
&& !DECL_EXTERNAL (t))
{
error ("Local declaration from a different function");
return t;
}
}
break;
case INDIRECT_REF:
error ("INDIRECT_REF in gimple IL");
return t;
......@@ -2852,9 +2868,14 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
error ("invalid offset operand of MEM_REF");
return TREE_OPERAND (t, 1);
}
if (TREE_CODE (x) == ADDR_EXPR
&& (x = verify_address (x, TREE_OPERAND (x, 0))))
return x;
if (TREE_CODE (x) == ADDR_EXPR)
{
tree va = verify_address (x, TREE_OPERAND (x, 0));
if (va)
return va;
x = TREE_OPERAND (x, 0);
}
walk_tree (&x, verify_expr, data, NULL);
*walk_subtrees = 0;
break;
......@@ -3016,6 +3037,7 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
error ("invalid reference prefix");
return t;
}
walk_tree (&t, verify_expr, data, NULL);
*walk_subtrees = 0;
break;
case PLUS_EXPR:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment