aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-09-11 08:32:29 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-09-11 08:32:29 +0000
commit5a27a197d8ee9ca67e567ecf220e16d9bc4b44b6 (patch)
tree98c427e048e3281aefa608f46fb037c66bd0f9e8 /gcc/gimple-fold.c
parentd015040192cfa7bfffcd4178c1280ec5570f28c6 (diff)
downloadgcc-5a27a197d8ee9ca67e567ecf220e16d9bc4b44b6.zip
gcc-5a27a197d8ee9ca67e567ecf220e16d9bc4b44b6.tar.gz
gcc-5a27a197d8ee9ca67e567ecf220e16d9bc4b44b6.tar.bz2
re PR middle-end/54515 (cc1plus sigsegv -O2 anonymous namespace)
2012-09-11 Richard Guenther <rguenther@suse.de> PR middle-end/54515 * gimple.c (get_base_address): Do not return NULL_TREE apart from for WITH_SIZE_EXPR. * gimple-fold.c (canonicalize_constructor_val): Do not call get_base_address when not necessary. * g++.dg/tree-ssa/pr54515.C: New testcase. From-SVN: r191174
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r--gcc/gimple-fold.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 42bc0fc..bb13e1f 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -154,13 +154,15 @@ 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)
+ tree base = NULL_TREE;
+ if (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;
}
+ else
+ base = get_base_address (TREE_OPERAND (cval, 0));
if (!base)
return NULL_TREE;