diff options
author | Richard Henderson <rth@redhat.com> | 2008-10-01 07:28:04 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2008-10-01 07:28:04 -0700 |
commit | 35a45bd40e2a9a5fa65efe7bc25e98fa8f8d7fdc (patch) | |
tree | cc6a378a1afa6e193219356bf11b03a66957fbe1 /gcc | |
parent | 2d66eeeb56d642c1f080a580c5acadded1ff7816 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/complex-6.c | 17 | ||||
-rw-r--r-- | gcc/tree-complex.c | 3 |
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; |