This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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))


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]