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> 2012-05-29 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53516 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> 2012-05-26 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (variant_desc): Rename 'record' to 'new_type'. * 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 ()) if (global_bindings_p ())
rest_of_decl_compilation (var_decl, true, 0); rest_of_decl_compilation (var_decl, true, 0);
} }
else
expand_decl (var_decl);
return 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> 2012-05-29 Manuel López-Ibáñez <manu@gcc.gnu.org>
* c.opt (Wmissing-braces): Use LangEnabledBy(C ObjC,Wall). * 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); location_t, tree, tree);
extern tree build_indirect_ref (location_t, tree, ref_operator); 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 int field_decl_cmp (const void *, const void *);
extern void resort_sorted_fields (void *, void *, gt_pointer_operator, extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
void *); void *);

View File

@ -535,7 +535,6 @@ extern void store_parm_decls (void);
extern void store_parm_decls_from (struct c_arg_info *); extern void store_parm_decls_from (struct c_arg_info *);
extern tree xref_tag (enum tree_code, tree); extern tree xref_tag (enum tree_code, tree);
extern struct c_typespec parser_xref_tag (location_t, 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, extern struct c_parm *build_c_parm (struct c_declspecs *, tree,
struct c_declarator *); struct c_declarator *);
extern struct c_declarator *build_attrs_declarator (tree, 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, specified. If we were to allocate space on the stack here,
we would have no way of knowing when to free it. */ we would have no way of knowing when to free it. */
rtx d = assign_temp (rettype, 0, 1, 1); rtx d = assign_temp (rettype, 0, 1, 1);
mark_temp_addr_taken (d);
structure_value_addr = XEXP (d, 0); structure_value_addr = XEXP (d, 0);
target = 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), tree nt = build_qualified_type (TREE_TYPE (tem),
(TYPE_QUALS (TREE_TYPE (tem)) (TYPE_QUALS (TREE_TYPE (tem))
| TYPE_QUAL_CONST)); | TYPE_QUAL_CONST));
memloc = assign_temp (nt, 1, 1, 1); memloc = assign_temp (nt, 0, 1, 1);
emit_move_insn (memloc, op0); emit_move_insn (memloc, op0);
op0 = memloc; op0 = memloc;
mem_attrs_from_type = true; 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 POSTDECREMENT_EXPR:
case LOOP_EXPR: case LOOP_EXPR:
case EXIT_EXPR: case EXIT_EXPR:
case COMPOUND_LITERAL_EXPR:
/* Lowered by gimplify.c. */ /* Lowered by gimplify.c. */
gcc_unreachable (); 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, return expand_expr_real (treeop0, original_target, tmode,
modifier, alt_rtl); modifier, alt_rtl);
case COMPOUND_LITERAL_EXPR: #if 0
{ {
/* Initialize the anonymous variable declared in the compound /* Initialize the anonymous variable declared in the compound
literal, then return the variable. */ 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, return expand_expr_real (decl, original_target, tmode,
modifier, alt_rtl); modifier, alt_rtl);
} }
#endif
default: default:
return expand_expr_real_2 (&ops, target, tmode, modifier); return expand_expr_real_2 (&ops, target, tmode, modifier);

View File

@ -4788,11 +4788,8 @@ expand_function_start (tree subr)
tree t_save; tree t_save;
rtx r_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); tree var = TREE_OPERAND (cfun->nonlocal_goto_save_area, 0);
if (!DECL_RTL_SET_P (var)) gcc_assert (DECL_RTL_SET_P (var));
expand_decl (var);
t_save = build4 (ARRAY_REF, t_save = build4 (ARRAY_REF,
TREE_TYPE (TREE_TYPE (cfun->nonlocal_goto_save_area)), 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) if (TREE_CODE (cval) == ADDR_EXPR)
{ {
tree base = get_base_address (TREE_OPERAND (cval, 0)); 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) if (!base)
return NULL_TREE; 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. */ at this point. Ignore it: clearly this *is* a memory. */
} }
else else
gcc_unreachable ();
#if 0
{ {
warning (0, "use of memory input without lvalue in " warning (0, "use of memory input without lvalue in "
"asm operand %d is deprecated", i + noutputs); "asm operand %d is deprecated", i + noutputs);
@ -935,6 +937,7 @@ expand_asm_operands (tree string, tree outputs, tree inputs,
op = memloc; op = memloc;
} }
} }
#endif
} }
generating_concat_p = old_generating_concat_p; 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. */ type in case this node is used in a reference. */
if (TREE_CODE (decl) == CONST_DECL) if (TREE_CODE (decl) == CONST_DECL)
{ {
gcc_unreachable ();
DECL_MODE (decl) = TYPE_MODE (type); DECL_MODE (decl) = TYPE_MODE (type);
DECL_ALIGN (decl) = TYPE_ALIGN (type); DECL_ALIGN (decl) = TYPE_ALIGN (type);
DECL_SIZE (decl) = TYPE_SIZE (type); DECL_SIZE (decl) = TYPE_SIZE (type);
@ -1720,6 +1724,7 @@ expand_decl (tree decl)
if (TREE_STATIC (decl) || DECL_EXTERNAL (decl)) if (TREE_STATIC (decl) || DECL_EXTERNAL (decl))
return; return;
gcc_unreachable ();
/* Create the RTL representation for the variable. */ /* Create the RTL representation for the variable. */
if (type == error_mark_node) if (type == error_mark_node)

View File

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