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:
parent
13a234421d
commit
69135c94b3
2 changed files with 14 additions and 1 deletions
|
@ -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.
|
||||
|
||||
|
|
11
gcc/expr.c
11
gcc/expr.c
|
@ -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? */
|
||||
|
|
Loading…
Add table
Reference in a new issue