aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2008-10-01 07:28:04 -0700
committerRichard Henderson <rth@gcc.gnu.org>2008-10-01 07:28:04 -0700
commit35a45bd40e2a9a5fa65efe7bc25e98fa8f8d7fdc (patch)
treecc6a378a1afa6e193219356bf11b03a66957fbe1 /gcc
parent2d66eeeb56d642c1f080a580c5acadded1ff7816 (diff)
downloadgcc-35a45bd40e2a9a5fa65efe7bc25e98fa8f8d7fdc.zip
gcc-35a45bd40e2a9a5fa65efe7bc25e98fa8f8d7fdc.tar.gz
gcc-35a45bd40e2a9a5fa65efe7bc25e98fa8f8d7fdc.tar.bz2
re PR tree-optimization/35737 (ICE with __builtin_setjmp and complex variable)
PR tree-opt/35737 * tree-complex.c (set_component_ssa_name): Don't optimize is_gimple_min_invariant values with ssa_names in abnormal phis. From-SVN: r140812
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/complex-6.c17
-rw-r--r--gcc/tree-complex.c3
3 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b6f1601..8dd8eb5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-10-01 Richard Henderson <rth@redhat.com>
+
+ PR tree-opt/35737
+ * tree-complex.c (set_component_ssa_name): Don't optimize
+ is_gimple_min_invariant values with ssa_names in abnormal phis.
+
2008-09-30 Paolo Bonzini <bonzini@gnu.org>
PR tree-optimization/37662
diff --git a/gcc/testsuite/gcc.c-torture/compile/complex-6.c b/gcc/testsuite/gcc.c-torture/compile/complex-6.c
new file mode 100644
index 0000000..eb89040
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/complex-6.c
@@ -0,0 +1,17 @@
+/* PR tree-opt/35737 */
+
+long buf[10];
+
+int foo()
+{
+ __complex__ int i = 0;
+
+ if (__builtin_setjmp(buf))
+ {
+ i = 1;
+ bar();
+ }
+
+ return i == 0;
+}
+
diff --git a/gcc/tree-complex.c b/gcc/tree-complex.c
index bbf4c49..939bd6f 100644
--- a/gcc/tree-complex.c
+++ b/gcc/tree-complex.c
@@ -537,7 +537,8 @@ set_component_ssa_name (tree ssa_name, bool imag_p, tree value)
/* If we've nothing assigned, and the value we're given is already stable,
then install that as the value for this SSA_NAME. This preemptively
copy-propagates the value, which avoids unnecessary memory allocation. */
- else if (is_gimple_min_invariant (value))
+ else if (is_gimple_min_invariant (value)
+ && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name))
{
VEC_replace (tree, complex_ssa_name_components, ssa_name_index, value);
return NULL;