if (wi->changed)
{
+ tree save_context;
+
/* If we changed anything, then TREE_INVARIANT is be wrong,
since we're no longer directly referencing a decl. */
+ save_context = current_function_decl;
+ current_function_decl = info->context;
recompute_tree_invarant_for_addr_expr (t);
+ current_function_decl = save_context;
/* If the callback converted the address argument in a context
where we only accept variables (and min_invariant, presumably),
/* If we converted anything ... */
if (wi->changed)
{
+ tree save_context;
+
/* Then the frame decl is now addressable. */
TREE_ADDRESSABLE (info->frame_decl) = 1;
+ save_context = current_function_decl;
+ current_function_decl = info->context;
recompute_tree_invarant_for_addr_expr (t);
+ current_function_decl = save_context;
/* If we are in a context where we only accept values, then
compute the address into a temporary. */
out at this time. */
if (root->frame_type)
{
+ /* In some cases the frame type will trigger the -Wpadded warning.
+ This is not helpful; suppress it. */
+ int save_warn_padded = warn_padded;
+ warn_padded = 0;
layout_type (root->frame_type);
+ warn_padded = save_warn_padded;
layout_decl (root->frame_decl, 0);
}