+2012-05-29 Michael Matz <matz@suse.de>
+
+ * c-tree.h (c_expand_decl): Remove prototype.
+
+ * expr.c (expand_expr_real_1 <normal_inner_ref>): Don't allocate
+ a kept temp.
+ (expand_expr_real_1 <COMPOUND_LITERAL_EXPR>): Make unreachable.
+ * gimple-fold.c (canonicalize_constructor_val): Canonicalize
+ COMPOUND_LITERAL_EXPR.
+ * function.c (expand_function_start): Don't call expand_decl,
+ instead assert that we have RTL assigned.
+ * tree-ssa-live.c (remove_unused_locals): Clear
+ nonlocal_goto_save_area if its backing variable is removed.
+ * stmt.c (expand_asm_operands): Remove handling of non-lvalues
+ as mem inputs.
+ (expand_decl): Assert that this does nothing.
+ * calls.c (expand_call): Don't call mark_temp_addr_taken.
+
2012-05-29 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53516
+2012-05-29 Michael Matz <matz@suse.de>
+
+ * gcc-interface/utils.c (create_var_decl_1): Don't call expand_decl.
+
2012-05-26 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (variant_desc): Rename 'record' to 'new_type'.
if (global_bindings_p ())
rest_of_decl_compilation (var_decl, true, 0);
}
- else
- expand_decl (var_decl);
return var_decl;
}
+2012-05-29 Michael Matz <matz@suse.de>
+
+ * c-common.h (c_expand_decl): Remove prototype.
+
2012-05-29 Manuel López-Ibáñez <manu@gcc.gnu.org>
* c.opt (Wmissing-braces): Use LangEnabledBy(C ObjC,Wall).
location_t, tree, tree);
extern tree build_indirect_ref (location_t, tree, ref_operator);
-extern int c_expand_decl (tree);
-
extern int field_decl_cmp (const void *, const void *);
extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
void *);
extern void store_parm_decls_from (struct c_arg_info *);
extern tree xref_tag (enum tree_code, tree);
extern struct c_typespec parser_xref_tag (location_t, enum tree_code, tree);
-extern int c_expand_decl (tree);
extern struct c_parm *build_c_parm (struct c_declspecs *, tree,
struct c_declarator *);
extern struct c_declarator *build_attrs_declarator (tree,
specified. If we were to allocate space on the stack here,
we would have no way of knowing when to free it. */
rtx d = assign_temp (rettype, 0, 1, 1);
-
- mark_temp_addr_taken (d);
structure_value_addr = XEXP (d, 0);
target = 0;
}
tree nt = build_qualified_type (TREE_TYPE (tem),
(TYPE_QUALS (TREE_TYPE (tem))
| TYPE_QUAL_CONST));
- memloc = assign_temp (nt, 1, 1, 1);
+ memloc = assign_temp (nt, 0, 1, 1);
emit_move_insn (memloc, op0);
op0 = memloc;
mem_attrs_from_type = true;
case POSTDECREMENT_EXPR:
case LOOP_EXPR:
case EXIT_EXPR:
+ case COMPOUND_LITERAL_EXPR:
/* Lowered by gimplify.c. */
gcc_unreachable ();
return expand_expr_real (treeop0, original_target, tmode,
modifier, alt_rtl);
- case COMPOUND_LITERAL_EXPR:
+#if 0
{
/* Initialize the anonymous variable declared in the compound
literal, then return the variable. */
return expand_expr_real (decl, original_target, tmode,
modifier, alt_rtl);
}
+#endif
default:
return expand_expr_real_2 (&ops, target, tmode, modifier);
tree t_save;
rtx r_save;
- /* ??? We need to do this save early. Unfortunately here is
- before the frame variable gets declared. Help out... */
tree var = TREE_OPERAND (cfun->nonlocal_goto_save_area, 0);
- if (!DECL_RTL_SET_P (var))
- expand_decl (var);
+ gcc_assert (DECL_RTL_SET_P (var));
t_save = build4 (ARRAY_REF,
TREE_TYPE (TREE_TYPE (cfun->nonlocal_goto_save_area)),
if (TREE_CODE (cval) == ADDR_EXPR)
{
tree base = get_base_address (TREE_OPERAND (cval, 0));
+ if (!base && TREE_CODE (TREE_OPERAND (cval, 0)) == COMPOUND_LITERAL_EXPR)
+ {
+ base = COMPOUND_LITERAL_EXPR_DECL (TREE_OPERAND (cval, 0));
+ if (base)
+ TREE_OPERAND (cval, 0) = base;
+ }
if (!base)
return NULL_TREE;
at this point. Ignore it: clearly this *is* a memory. */
}
else
+ gcc_unreachable ();
+#if 0
{
warning (0, "use of memory input without lvalue in "
"asm operand %d is deprecated", i + noutputs);
op = memloc;
}
}
+#endif
}
generating_concat_p = old_generating_concat_p;
type in case this node is used in a reference. */
if (TREE_CODE (decl) == CONST_DECL)
{
+ gcc_unreachable ();
DECL_MODE (decl) = TYPE_MODE (type);
DECL_ALIGN (decl) = TYPE_ALIGN (type);
DECL_SIZE (decl) = TYPE_SIZE (type);
if (TREE_STATIC (decl) || DECL_EXTERNAL (decl))
return;
+ gcc_unreachable ();
/* Create the RTL representation for the variable. */
if (type == error_mark_node)
{
if (var_ann (var))
remove_referenced_var (var);
+ if (cfun->nonlocal_goto_save_area
+ && TREE_OPERAND (cfun->nonlocal_goto_save_area, 0) == var)
+ cfun->nonlocal_goto_save_area = NULL;
continue;
}
}