aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2012-05-29 14:41:53 +0000
committerMichael Matz <matz@gcc.gnu.org>2012-05-29 14:41:53 +0000
commitca5f4331230013bba0a5e4d1c4340158b2991b65 (patch)
tree5534a3c29342dd48c087ead51be0face86e90762 /gcc
parent508ef0c675b409e2c92c8078a2dc5043da88db1b (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog18
-rw-r--r--gcc/ada/ChangeLog4
-rw-r--r--gcc/ada/gcc-interface/utils.c2
-rw-r--r--gcc/c-family/ChangeLog4
-rw-r--r--gcc/c-family/c-common.h2
-rw-r--r--gcc/c-tree.h1
-rw-r--r--gcc/calls.c2
-rw-r--r--gcc/expr.c6
-rw-r--r--gcc/function.c5
-rw-r--r--gcc/gimple-fold.c6
-rw-r--r--gcc/stmt.c5
-rw-r--r--gcc/tree-ssa-live.c3
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;
}
diff --git a/gcc/expr.c b/gcc/expr.c
index d568deb..fd995d1 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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;
diff --git a/gcc/stmt.c b/gcc/stmt.c
index dd34890..a9258b1 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -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;
}
}