aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2005-02-22 17:10:39 -0800
committerDevang Patel <dpatel@gcc.gnu.org>2005-02-22 17:10:39 -0800
commit263fb23d4aee9876d22ea0dd72fe174335c277f3 (patch)
treef5db02546ac575b2d38f73e9961bd90d1d4d57fb
parenta47e0c22a0ad6b2cca2d5377ec46ec067c423dad (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr19952.C24
-rw-r--r--gcc/tree-if-conv.c2
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. */