diff options
author | Michael Matz <matz@suse.de> | 2012-05-29 14:41:53 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2012-05-29 14:41:53 +0000 |
commit | ca5f4331230013bba0a5e4d1c4340158b2991b65 (patch) | |
tree | 5534a3c29342dd48c087ead51be0face86e90762 | |
parent | 508ef0c675b409e2c92c8078a2dc5043da88db1b (diff) | |
download | gcc-ca5f4331230013bba0a5e4d1c4340158b2991b65.zip gcc-ca5f4331230013bba0a5e4d1c4340158b2991b65.tar.gz gcc-ca5f4331230013bba0a5e4d1c4340158b2991b65.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 18 | ||||
-rw-r--r-- | gcc/ada/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/utils.c | 2 | ||||
-rw-r--r-- | gcc/c-family/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/c-family/c-common.h | 2 | ||||
-rw-r--r-- | gcc/c-tree.h | 1 | ||||
-rw-r--r-- | gcc/calls.c | 2 | ||||
-rw-r--r-- | gcc/expr.c | 6 | ||||
-rw-r--r-- | gcc/function.c | 5 | ||||
-rw-r--r-- | gcc/gimple-fold.c | 6 | ||||
-rw-r--r-- | gcc/stmt.c | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-live.c | 3 |
12 files changed, 45 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 399da93..5d2b2e4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f92edbb..e031f46 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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'. diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 36012a6..5800308 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -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; } diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 650302b..a6a3623 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -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). diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index c3d679a..c8e6ce1 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -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 *); diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 8f8c9d8e..8541747 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -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, diff --git a/gcc/calls.c b/gcc/calls.c index 03c9216..ea9e5cf 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -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; } @@ -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); diff --git a/gcc/function.c b/gcc/function.c index 00c55a1..0fd4d36 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -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)), diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 8bcc13e..b2bd337 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -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; @@ -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) diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c index dfbf110..2520206 100644 --- a/gcc/tree-ssa-live.c +++ b/gcc/tree-ssa-live.c @@ -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; } } |