expr.c (expand_expr_real_1 <normal_inner_ref>): Don't allocate a kept temp.

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

	* c-tree.h (c_expand_decl): Remove prototype.

c-family/
	* c-common.h (c_expand_decl): Remove prototype.

ada/
	* gcc-interface/utils.c (create_var_decl_1): Don't call expand_decl.

From-SVN: r187962
This commit is contained in:
Michael Matz 2012-05-29 14:41:53 +00:00 committed by Michael Matz
parent 508ef0c675
commit ca5f433123
12 changed files with 45 additions and 13 deletions

View File

@ -1,3 +1,21 @@
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

View File

@ -1,3 +1,7 @@
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'.

View File

@ -2227,8 +2227,6 @@ create_var_decl_1 (tree var_name, tree asm_name, tree type, tree var_init,
if (global_bindings_p ())
rest_of_decl_compilation (var_decl, true, 0);
}
else
expand_decl (var_decl);
return var_decl;
}

View File

@ -1,3 +1,7 @@
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).

View File

@ -544,8 +544,6 @@ extern tree build_modify_expr (location_t, tree, tree, enum tree_code,
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 *);

View File

@ -535,7 +535,6 @@ extern void store_parm_decls (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,

View File

@ -2405,8 +2405,6 @@ expand_call (tree exp, rtx target, int ignore)
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;
}

View File

@ -9922,7 +9922,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
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;
@ -10425,6 +10425,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
case POSTDECREMENT_EXPR:
case LOOP_EXPR:
case EXIT_EXPR:
case COMPOUND_LITERAL_EXPR:
/* Lowered by gimplify.c. */
gcc_unreachable ();
@ -10439,7 +10440,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
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. */
@ -10459,6 +10460,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
return expand_expr_real (decl, original_target, tmode,
modifier, alt_rtl);
}
#endif
default:
return expand_expr_real_2 (&ops, target, tmode, modifier);

View File

@ -4788,11 +4788,8 @@ expand_function_start (tree subr)
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)),

View File

@ -154,6 +154,12 @@ canonicalize_constructor_val (tree cval, tree from_decl)
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;

View File

@ -910,6 +910,8 @@ expand_asm_operands (tree string, tree outputs, tree inputs,
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);
@ -935,6 +937,7 @@ expand_asm_operands (tree string, tree outputs, tree inputs,
op = memloc;
}
}
#endif
}
generating_concat_p = old_generating_concat_p;
@ -1703,6 +1706,7 @@ expand_decl (tree decl)
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);
@ -1720,6 +1724,7 @@ expand_decl (tree decl)
if (TREE_STATIC (decl) || DECL_EXTERNAL (decl))
return;
gcc_unreachable ();
/* Create the RTL representation for the variable. */
if (type == error_mark_node)

View File

@ -835,6 +835,9 @@ remove_unused_locals (void)
{
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;
}
}