expr.c (expand_expr_addr_expr_1): Detect a user request for a local frame in a naked function...

* expr.c (expand_expr_addr_expr_1): Detect a user request for a
local frame in a naked function, and produce a suitable error for
that specific case.

From-SVN: r176904
This commit is contained in:
DJ Delorie 2011-07-28 18:26:23 -04:00 committed by DJ Delorie
parent 13a234421d
commit 69135c94b3
2 changed files with 14 additions and 1 deletions

View file

@ -1,5 +1,9 @@
2011-07-28 DJ Delorie <dj@redhat.com>
* expr.c (expand_expr_addr_expr_1): Detect a user request for a
local frame in a naked function, and produce a suitable error for
that specific case.
* config/m32c/m32c.c (m32c_secondary_reload_class): Allow PSI
registers to be reloaded in HI classes when the target is HI.

View file

@ -7088,7 +7088,16 @@ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode,
/* If the DECL isn't in memory, then the DECL wasn't properly
marked TREE_ADDRESSABLE, which will be either a front-end
or a tree optimizer bug. */
gcc_assert (MEM_P (result));
if (TREE_ADDRESSABLE (exp)
&& ! MEM_P (result)
&& ! targetm.calls.allocate_stack_slots_for_args())
{
error ("local frame unavailable (naked function?)");
return result;
}
else
gcc_assert (MEM_P (result));
result = XEXP (result, 0);
/* ??? Is this needed anymore? */