aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2018-09-15 09:21:09 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2018-09-15 09:21:09 +0000
commitae486e6281fb11a3ae37ccaecc840bb4c8c2551f (patch)
tree2c072044756f9c2f08347fd875bcf805f39969f5
parent19d6277cdf311f3e8dde6cbcdc72503c41cd9b4f (diff)
downloadgcc-ae486e6281fb11a3ae37ccaecc840bb4c8c2551f.zip
gcc-ae486e6281fb11a3ae37ccaecc840bb4c8c2551f.tar.gz
gcc-ae486e6281fb11a3ae37ccaecc840bb4c8c2551f.tar.bz2
re PR middle-end/86864 (ICE in commit_one_edge_insertion on switch construct)
PR middle-end/86864 * cfgexpand.c (expand_gimple_basic_block): Be prepared for a BARRIER before and after a JUMP_TABLE_DATA. From-SVN: r264342
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgexpand.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20180915-1.c27
4 files changed, 39 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8fda90a..9f6b4b5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-09-15 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR middle-end/86864
+ * cfgexpand.c (expand_gimple_basic_block): Be prepared for a BARRIER
+ before and after a JUMP_TABLE_DATA.
+
2018-09-14 John David Anglin <danglin@gcc.gnu.org>
PR middle-end/87188
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 697b238..c8d7805 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -5817,6 +5817,8 @@ expand_gimple_basic_block (basic_block bb, bool disable_tail_calls)
last = PREV_INSN (last);
if (JUMP_TABLE_DATA_P (last))
last = PREV_INSN (PREV_INSN (last));
+ if (BARRIER_P (last))
+ last = PREV_INSN (last);
BB_END (bb) = last;
update_bb_for_insn (bb);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 25c253f..847f57b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2018-09-15 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.c-torture/compile/20180915-1.c: New test.
+
2018-09-14 David Malcolm <dmalcolm@redhat.com>
PR c/82967
diff --git a/gcc/testsuite/gcc.c-torture/compile/20180915-1.c b/gcc/testsuite/gcc.c-torture/compile/20180915-1.c
new file mode 100644
index 0000000..be5c4f0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20180915-1.c
@@ -0,0 +1,27 @@
+/* PR middle-end/86864 */
+/* Testcase by Serge Belyshev <belyshev@depni.sinp.msu.ru> */
+
+long a;
+void f ();
+void g (int b, int c, int d)
+{
+ switch (b)
+ {
+ case 42:
+ case 29:
+ case 48:
+ case 40:
+ case 32:
+ c = 2;
+ break;
+ case 0:
+ c = 1;
+ break;
+ default:
+ __builtin_unreachable ();
+ }
+ if (d || a)
+ f ();
+ if (c == 1)
+ f ();
+}