]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/43379 (ICE: error: SSA_NAME_OCCURS_IN_ABNORMAL_PHI should...
authorRichard Guenther <rguenther@suse.de>
Tue, 16 Mar 2010 12:31:38 +0000 (12:31 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 16 Mar 2010 12:31:38 +0000 (12:31 +0000)
2010-03-16  Richard Guenther  <rguenther@suse.de>

PR middle-end/43379
* tree-cfg.c (gimple_merge_blocks): When propagating virtual
PHI operands make sure to merge SSA_NAME_OCCURS_IN_ABNORMAL_PHI
properly.

* gcc.dg/pr43379.c: New testcase.

From-SVN: r157478

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr43379.c [new file with mode: 0644]
gcc/tree-cfg.c

index fda7e80c4b15be7a69c68ba0ef26349b365bf273..cd624b5a4231e1aa195e1ac4a817e53afe2009ce 100644 (file)
@@ -1,3 +1,10 @@
+2010-03-16  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/43379
+       * tree-cfg.c (gimple_merge_blocks): When propagating virtual
+       PHI operands make sure to merge SSA_NAME_OCCURS_IN_ABNORMAL_PHI
+       properly.
+
 2010-03-16  Aldy Hernandez  <aldyh@redhat.com>
            Alexandre Oliva  <aoliva@redhat.com>
 
index dfe0246adb9b119deac745ec3ad9f6e255f11f98..37d07651ee67c8a9cf5e1cc98251fed4aa3986d6 100644 (file)
@@ -1,3 +1,8 @@
+2010-03-16  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/43379
+       * gcc.dg/pr43379.c: New testcase.
+
 2010-03-16  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/43051
diff --git a/gcc/testsuite/gcc.dg/pr43379.c b/gcc/testsuite/gcc.dg/pr43379.c
new file mode 100644 (file)
index 0000000..de9bf66
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftracer" } */
+
+void *foo(int i, int *p)
+{
+lab:
+  if (p) *p = i;
+  goto *p;
+  return &&lab;
+}
+
index 6f4e4167a6bc2bd66c40a68f3752964197747e9b..01fefc306ef5c47c1261403973d2e004a0ae649a 100644 (file)
@@ -1617,6 +1617,9 @@ gimple_merge_blocks (basic_block a, basic_block b)
              FOR_EACH_IMM_USE_STMT (stmt, iter, def)
                FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
                  SET_USE (use_p, use);
+
+             if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (def))
+               SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use) = 1;
            }
          else
             replace_uses_by (def, use);