This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR87693
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 23 Oct 2018 10:50:34 +0200 (CEST)
- Subject: [PATCH] Fix PR87693
Bootstrapped / tested on x86_64-unknown-linux-gnu, applied.
Richard.
2018-10-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/87693
* tree-ssa-threadedge.c (thread_around_empty_blocks): Handle
the case we do not find the taken edge.
* gcc.dg/torture/pr87693.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/torture/pr87693.c b/gcc/testsuite/gcc.dg/torture/pr87693.c
new file mode 100644
index 00000000000..802560dd347
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr87693.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+
+void f (void);
+void g (void);
+void h (int a)
+{
+ void *p, **q;
+ if (a)
+ p = (void *)f;
+ else
+ p = (void *)g;
+ q = (void *)p;
+ if (*q == (void *)0)
+ goto *p;
+L0:
+ return;
+}
diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c
index 0b1f9733fdd..330ba153e37 100644
--- a/gcc/tree-ssa-threadedge.c
+++ b/gcc/tree-ssa-threadedge.c
@@ -981,7 +981,8 @@ thread_around_empty_blocks (edge taken_edge,
else
taken_edge = find_taken_edge (bb, cond);
- if ((taken_edge->flags & EDGE_DFS_BACK) != 0)
+ if (!taken_edge
+ || (taken_edge->flags & EDGE_DFS_BACK) != 0)
return false;
if (bitmap_bit_p (visited, taken_edge->dest->index))