aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-07-19 21:54:49 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2016-07-19 21:54:49 +0200
commit4833f5615ea56f73106ca8537d0a8b50463fd164 (patch)
tree3fcdda9cdcfd24e854b323303660ef54e6b9ea7e /gcc
parentf36a3ff7f79ee4c039716557cb6205c5a3ae1924 (diff)
downloadgcc-4833f5615ea56f73106ca8537d0a8b50463fd164.zip
gcc-4833f5615ea56f73106ca8537d0a8b50463fd164.tar.gz
gcc-4833f5615ea56f73106ca8537d0a8b50463fd164.tar.bz2
re PR rtl-optimization/71916 (ICE at -O3 on valid code on x86_64-linux-gnu in "maybe_record_trace_start")
PR rtl-optimization/71916 * cfgrtl.c (contains_no_active_insn_p): Return false also for bb which have a single succ fake edge. * gcc.c-torture/compile/pr71916.c: New test. From-SVN: r238490
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgrtl.c6
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr71916.c36
4 files changed, 49 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3511951..d3dfcc8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-07-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/71916
+ * cfgrtl.c (contains_no_active_insn_p): Return false also for
+ bb which have a single succ fake edge.
+
2016-07-19 Aldy Hernandez <aldyh@redhat.com>
PR debug/71855
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 3d8ed60..e1f354e 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -574,8 +574,10 @@ contains_no_active_insn_p (const_basic_block bb)
{
rtx_insn *insn;
- if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb == ENTRY_BLOCK_PTR_FOR_FN (cfun)
- || !single_succ_p (bb))
+ if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun)
+ || bb == ENTRY_BLOCK_PTR_FOR_FN (cfun)
+ || !single_succ_p (bb)
+ || (single_succ_edge (bb)->flags & EDGE_FAKE) != 0)
return false;
for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = NEXT_INSN (insn))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 17fcb00..ceae017 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2016-07-19 Jakub Jelinek <jakub@redhat.com>
+ PR rtl-optimization/71916
+ * gcc.c-torture/compile/pr71916.c: New test.
+
PR middle-end/71874
* g++.dg/torture/pr71874.C: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr71916.c b/gcc/testsuite/gcc.c-torture/compile/pr71916.c
new file mode 100644
index 0000000..95bc5b7
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr71916.c
@@ -0,0 +1,36 @@
+/* PR rtl-optimization/71916 */
+
+int a, b, c, d, f, g;
+short h;
+
+short
+foo (short p1)
+{
+ return a >= 2 || p1 > 7 >> a ? p1 : p1 << a;
+}
+
+void
+bar (void)
+{
+ for (;;)
+ {
+ int i, j[3];
+ h = b >= 2 ? d : d >> b;
+ if (foo (f > h ^ c))
+ {
+ d = 0;
+ while (f <= 2)
+ {
+ char k[2];
+ for (;;)
+ k[i++] = 7;
+ }
+ }
+ else
+ for (;;)
+ g = j[2];
+ if (g)
+ for (;;)
+ ;
+ }
+}