Commit 6c6366f6 by Jakub Jelinek Committed by Jakub Jelinek

cfgexpand.c (expand_used_vars): If an artificial non-ignored var has no rtl yet…

cfgexpand.c (expand_used_vars): If an artificial non-ignored var has no rtl yet when processing local_decls...

	* cfgexpand.c (expand_used_vars): If an artificial non-ignored var
	has no rtl yet when processing local_decls, queue it and recheck
	if deferred stack allocation hasn't assigned it rtl.

From-SVN: r157132
parent 8026c68c
2010-03-01 Jakub Jelinek <jakub@redhat.com>
* cfgexpand.c (expand_used_vars): If an artificial non-ignored var
has no rtl yet when processing local_decls, queue it and recheck
if deferred stack allocation hasn't assigned it rtl.
2010-02-28 Kaz Kojima <kkojima@gcc.gnu.org>
* config/sh/sh.c (unspec_bbr_uid): New.
......
......@@ -1283,6 +1283,7 @@ static void
expand_used_vars (void)
{
tree t, next, outer_block = DECL_INITIAL (current_function_decl);
tree maybe_local_decls = NULL_TREE;
unsigned i;
/* Compute the phase of the stack frame for this function. */
......@@ -1367,6 +1368,15 @@ expand_used_vars (void)
cfun->local_decls = t;
continue;
}
else if (rtl == NULL_RTX)
{
/* If rtl isn't set yet, which can happen e.g. with
-fstack-protector, retry before returning from this
function. */
TREE_CHAIN (t) = maybe_local_decls;
maybe_local_decls = t;
continue;
}
}
ggc_free (t);
......@@ -1425,6 +1435,28 @@ expand_used_vars (void)
fini_vars_expansion ();
}
/* If there were any artificial non-ignored vars without rtl
found earlier, see if deferred stack allocation hasn't assigned
rtl to them. */
for (t = maybe_local_decls; t; t = next)
{
tree var = TREE_VALUE (t);
rtx rtl = DECL_RTL_IF_SET (var);
next = TREE_CHAIN (t);
/* Keep artificial non-ignored vars in cfun->local_decls
chain until instantiate_decls. */
if (rtl && (MEM_P (rtl) || GET_CODE (rtl) == CONCAT))
{
TREE_CHAIN (t) = cfun->local_decls;
cfun->local_decls = t;
continue;
}
ggc_free (t);
}
/* If the target requires that FRAME_OFFSET be aligned, do it. */
if (STACK_ALIGNMENT_NEEDED)
{
......
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