* 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
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.
/* 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? */