diff options
author | Devang Patel <dpatel@apple.com> | 2005-02-22 17:10:39 -0800 |
---|---|---|
committer | Devang Patel <dpatel@gcc.gnu.org> | 2005-02-22 17:10:39 -0800 |
commit | 263fb23d4aee9876d22ea0dd72fe174335c277f3 (patch) | |
tree | f5db02546ac575b2d38f73e9961bd90d1d4d57fb | |
parent | a47e0c22a0ad6b2cca2d5377ec46ec067c423dad (diff) | |
download | gcc-263fb23d4aee9876d22ea0dd72fe174335c277f3.zip gcc-263fb23d4aee9876d22ea0dd72fe174335c277f3.tar.gz gcc-263fb23d4aee9876d22ea0dd72fe174335c277f3.tar.bz2 |
re PR tree-optimization/19952 (ICE: tree check: expected class 'declaration', have 'statement' (label_expr) in tree_verify_flow_info, at tree-cfg.c:3709)
PR 19952
* tree-if-conv.c (process_phi_nodes): Use bsi_after_labels and skip
all labels
* g++.dg/tree-ssa/pr19952.C: New test.
From-SVN: r95430
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tree-ssa/pr19952.C | 24 | ||||
-rw-r--r-- | gcc/tree-if-conv.c | 2 |
4 files changed, 36 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 832c0ed..68199d0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-02-22 Devang Patel <dpatel@apple.com> + + PR 19952 + * tree-if-conv.c (process_phi_nodes): Use bsi_after_labels and skip + all labels + 2005-02-22 David Edelsohn <edelsohn@gnu.org> * config/rs6000/aix.h (WINT_TYPE): Define. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 86857d2..1a64436 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-02-22 Devang Patel <dpatel@apple.com> + + PR 19952 + * g++.dg/tree-ssa/pr19952.C: New test. + 2005-02-22 Mark Mitchell <mark@codesourcery.com> PR c++/19883 diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr19952.C b/gcc/testsuite/g++.dg/tree-ssa/pr19952.C new file mode 100644 index 0000000..92d669c --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr19952.C @@ -0,0 +1,24 @@ +/* PR 19952 */ +/* { dg-compile } */ +/* { dg-options "-ftree-vectorize -O2" } */ + +int i; + +struct A +{ + ~A() { ++i; } +}; + +struct B +{ + A a; +}; + +void foo() +{ + for (int i=0; i<2; ++i) + { + B *p; + if (p) p->~B(); + } +} diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index 73fba3f..52bcfba 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -830,7 +830,7 @@ process_phi_nodes (struct loop *loop) continue; phi = phi_nodes (bb); - bsi = bsi_start (bb); + bsi = bsi_after_labels (bb); /* BB has two predecessors. Using predecessor's aux field, set appropriate condition for the PHI node replacement. */ |