re PR tree-optimization/90208 (error: EH landing pad label)
authorJakub Jelinek <jakub@redhat.com>
Wed, 24 Apr 2019 08:14:50 +0000 (10:14 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 24 Apr 2019 08:14:50 +0000 (10:14 +0200)
PR tree-optimization/90208
* tree-cfg.c (remove_bb): Move forced labels from removed bbs
after labels of new_bb, not before them.

* gcc.dg/tsan/pr90208-1.c: New test.
* gcc.dg/tsan/pr90208-2.c: New test.

From-SVN: r270534

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tsan/pr90208-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tsan/pr90208-2.c [new file with mode: 0644]
gcc/tree-cfg.c

index d4af0fd1724778128a4b18a2ef0966de329090ab..e098504f0816814fc32d91f34fc9c88042320463 100644 (file)
@@ -1,5 +1,9 @@
 2019-04-24  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/90208
+       * tree-cfg.c (remove_bb): Move forced labels from removed bbs
+       after labels of new_bb, not before them.
+
        PR tree-optimization/90211
        * tree-parloops.c (try_create_reduction_list): Ignore phi arguments
        which are not SSA_NAMEs.
index b301146a5f8d7975d0f075c6e9b33b87e44553a3..73b34e071135d9134ec46e370211a712cbec245b 100644 (file)
@@ -1,5 +1,9 @@
 2019-04-24  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/90208
+       * gcc.dg/tsan/pr90208-1.c: New test.
+       * gcc.dg/tsan/pr90208-2.c: New test.
+
        PR tree-optimization/90211
        * gcc.dg/autopar/pr90211.c: New test.
 
diff --git a/gcc/testsuite/gcc.dg/tsan/pr90208-1.c b/gcc/testsuite/gcc.dg/tsan/pr90208-1.c
new file mode 100644 (file)
index 0000000..528c3b0
--- /dev/null
@@ -0,0 +1,5 @@
+/* PR tree-optimization/90208 */
+/* { dg-do compile } */
+/* { dg-options "-O3 -fexceptions -fsanitize=thread" } */
+
+#include "../../gcc.c-torture/compile/pr89280.c"
diff --git a/gcc/testsuite/gcc.dg/tsan/pr90208-2.c b/gcc/testsuite/gcc.dg/tsan/pr90208-2.c
new file mode 100644 (file)
index 0000000..c3823d0
--- /dev/null
@@ -0,0 +1,20 @@
+/* PR tree-optimization/90208 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fexceptions -fsanitize=thread" } */
+
+void *b[5];
+void foo (void);
+
+void
+bar (int d)
+{
+  while (d)
+    foo ();
+}
+
+void
+baz (void)
+{
+  bar (2);
+  __builtin_setjmp (b);
+}
index 0dc94ea41d4a549319ff4a80024504eef29b1f06..587408150fb0e9ff9a7a9a6ccaa321b16c7ccecc 100644 (file)
@@ -2265,7 +2265,7 @@ remove_bb (basic_block bb)
                  new_bb = single_succ (new_bb);
                  gcc_assert (new_bb != bb);
                }
-             new_gsi = gsi_start_bb (new_bb);
+             new_gsi = gsi_after_labels (new_bb);
              gsi_remove (&i, false);
              gsi_insert_before (&new_gsi, stmt, GSI_NEW_STMT);
            }