aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-sra.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2010-12-09 16:11:26 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2010-12-09 16:11:26 +0100
commit363e01ccc9a7c4d930617e9e2dcaee8f4f317361 (patch)
treea649156fc4ed815181f0260b8c18f60eca1a7c18 /gcc/tree-sra.c
parent8b6606f2fa4e3a3992e7fcc4a026173232769cae (diff)
downloadgcc-363e01ccc9a7c4d930617e9e2dcaee8f4f317361.zip
gcc-363e01ccc9a7c4d930617e9e2dcaee8f4f317361.tar.gz
gcc-363e01ccc9a7c4d930617e9e2dcaee8f4f317361.tar.bz2
re PR middle-end/46734 (ICE in create_tmp_var, at gimplify.c:505)
2010-12-09 Martin Jambor <mjambor@suse.cz> PR middle-end/46734 * tree-sra.c (splice_param_accesses): Check that there are not multiple ADDRESSABLE types. * testsuite/g++.dg/tree-ssa/pr46734.C: New test. From-SVN: r167639
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r--gcc/tree-sra.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index c06ca8e..4330a17 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -3587,7 +3587,10 @@ splice_param_accesses (tree parm, bool *ro_grp)
else if (ac2->size != access->size)
return NULL;
- if (access_precludes_ipa_sra_p (ac2))
+ if (access_precludes_ipa_sra_p (ac2)
+ || (ac2->type != access->type
+ && (TREE_ADDRESSABLE (ac2->type)
+ || TREE_ADDRESSABLE (access->type))))
return NULL;
modification |= ac2->write;