From 74870a4e38a1d829748a404c836ca3f31767a0e4 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 30 Aug 2019 14:39:09 +0200 Subject: [PATCH] backport: re PR tree-optimization/90208 (error: EH landing pad label) Backported from mainline 2019-04-24 Jakub Jelinek 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-2.c: New test. From-SVN: r275151 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/tsan/pr90208-2.c | 20 ++++++++++++++++++++ gcc/tree-cfg.c | 2 +- 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/tsan/pr90208-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e02a1d1033b6..7b21d88fdecb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-04-24 Jakub Jelinek + + PR tree-optimization/90208 + * tree-cfg.c (remove_bb): Move forced labels from removed bbs + after labels of new_bb, not before them. + 2019-04-16 Jakub Jelinek PR rtl-optimization/90082 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9b51773a0d31..4bbe02353780 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-04-24 Jakub Jelinek + + PR tree-optimization/90208 + * gcc.dg/tsan/pr90208-2.c: New test. + 2019-04-19 Jakub Jelinek PR c++/90108 diff --git a/gcc/testsuite/gcc.dg/tsan/pr90208-2.c b/gcc/testsuite/gcc.dg/tsan/pr90208-2.c new file mode 100644 index 000000000000..c3823d0a400e --- /dev/null +++ b/gcc/testsuite/gcc.dg/tsan/pr90208-2.c @@ -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); +} diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index c223ee45be23..b98d6aeb44c9 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -2170,7 +2170,7 @@ remove_bb (basic_block bb) } new_bb = bb->prev_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); } -- 2.47.2