+ if (SSA_NAME_VAR (ssa_name) != NULL_TREE
+ && decl_function_context (SSA_NAME_VAR (ssa_name)) != cfun->decl)
+ {
+ error ("SSA name for variable not belonging to the current function");
+ return true;
+ }
+
if (is_virtual && !virtual_operand_p (ssa_name))
{
error ("found a virtual definition for a GIMPLE register");
should catch the root cause. Well, it's already bogus at into-SSA time.
Confirmed. We trap on
9446 /* Variables inherited from containing functions should have context (exp); function_ decl
9447 been lowered by this point. */
9448 context = decl_function_
9449 gcc_assert (SCOPE_FILE_SCOPE_P (context)
9450 || context == current_
9451 || TREE_STATIC (exp)
9452 || DECL_EXTERNAL (exp)
9453 /* ??? C++ creates functions that are not TREE_STATIC. */
(gdb) l
9454 || TREE_CODE (exp) == FUNCTION_DECL);
where the context is 'main' but cfun is 'operator()' and 'exp' is the
SSA_NAME_VAR of an SSA name.
Index: gcc/tree-ssa.c ======= ======= ======= ======= ======= ======= ======= ======= ====
=======
--- gcc/tree-ssa.c (revision 209423)
+++ gcc/tree-ssa.c (working copy)
@@ -686,6 +686,13 @@ verify_ssa_name (tree ssa_name, bool is_
return true;
}
+ if (SSA_NAME_VAR (ssa_name) != NULL_TREE context (SSA_NAME_VAR (ssa_name)) != cfun->decl)
+ && decl_function_
+ {
+ error ("SSA name for variable not belonging to the current function");
+ return true;
+ }
+
if (is_virtual && !virtual_operand_p (ssa_name))
{
error ("found a virtual definition for a GIMPLE register");
should catch the root cause. Well, it's already bogus at into-SSA time.
Index: gcc/tree-cfg.c ======= ======= ======= ======= ======= ======= ======= ======= ====
=======
--- gcc/tree-cfg.c (revision 209423)
+++ gcc/tree-cfg.c (working copy)
@@ -2972,6 +2989,15 @@ verify_expr (tree *tp, int *walk_subtree
}
break;
+ case VAR_DECL: context (t) context (t) != cfun->decl)
+ if (decl_function_
+ && decl_function_
+ {
+ error ("invalid context of variable");
+ return t;
+ }
+ break;
+
default:
break;
}
makes it error after CFG construction. So it must be an error during
un-nesting (which is interwinded with gimplification).
Confirmed, not a regression.