OSDN Git Service

2010-03-16 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 16 Mar 2010 12:31:38 +0000 (12:31 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 16 Mar 2010 12:31:38 +0000 (12:31 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157478 138bc75d-0d04-0410-961f-82ee72b054a4

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

index fda7e80..cd624b5 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 dfe0246..37d0765 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 6f4e416..01fefc3 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);