]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Backport "Fix sigsegv in find_same_succ_bb"
authorTom de Vries <tom@codesourcery.com>
Mon, 3 Jul 2017 08:43:40 +0000 (08:43 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Mon, 3 Jul 2017 08:43:40 +0000 (08:43 +0000)
2017-07-03  Tom de Vries  <tom@codesourcery.com>

backport from mainline:
2017-07-03  Tom de Vries  <tom@codesourcery.com>

PR tree-optimization/81192
* tree-ssa-tail-merge.c (same_succ_flush_bb): Handle
BB_SAME_SUCC (bb) == NULL.

* gcc.dg/pr81192.c: New test.

From-SVN: r249899

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr81192.c [new file with mode: 0644]
gcc/tree-ssa-tail-merge.c

index 9ac07210cd963afd7cab1bf27b7a17853e00d6ef..e138d744cb2cc0fff5c1524f4c0ae653ad3530a8 100644 (file)
@@ -1,3 +1,12 @@
+2017-07-03  Tom de Vries  <tom@codesourcery.com>
+
+       backport from mainline:
+       PR tree-optimization/81192
+       2017-07-03  Tom de Vries  <tom@codesourcery.com>
+
+       * tree-ssa-tail-merge.c (same_succ_flush_bb): Handle
+       BB_SAME_SUCC (bb) == NULL.
+
 2017-06-27  Segher Boessenkool  <segher@kernel.crashing.org>
 
        Revert:
index 7fd2ab61b841d5b1e3613cb72e2ad56d65293198..a8998360f8ad01b475617547449b4d84a1cf7331 100644 (file)
@@ -1,3 +1,11 @@
+2017-07-03  Tom de Vries  <tom@codesourcery.com>
+
+       backport from mainline:
+       PR tree-optimization/81192
+       2017-07-03  Tom de Vries  <tom@codesourcery.com>
+
+       * gcc.dg/pr81192.c: New test.
+
 2017-06-27  Segher Boessenkool  <segher@kernel.crashing.org>
 
        Revert:
diff --git a/gcc/testsuite/gcc.dg/pr81192.c b/gcc/testsuite/gcc.dg/pr81192.c
new file mode 100644 (file)
index 0000000..57eb478
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-options "-Os -fdump-tree-pre-details" } */
+
+unsigned a;
+int b, c;
+
+static int
+fn1 (int p1, int p2)
+{
+  return p1 > 2147483647 - p2 ? p1 : p1 + p2;
+}
+
+void
+fn2 (void)
+{
+  int j;
+  a = 30;
+  for (; a;)
+    for (; c; b = fn1 (j, 1))
+      ;
+}
+
+/* { dg-final { scan-tree-dump-times "(?n)find_duplicates: <bb .*> duplicate of <bb .*>" 1 "pre" } } */
index adcd9d42e90c2f7ce9732db044b3c198965a8c37..a8e337c5e4fa749126a9b1697e8ddf6dc908918a 100644 (file)
@@ -844,6 +844,9 @@ static void
 same_succ_flush_bb (basic_block bb)
 {
   same_succ same = BB_SAME_SUCC (bb);
+  if (! same)
+    return;
+
   BB_SAME_SUCC (bb) = NULL;
   if (bitmap_single_bit_set_p (same->bbs))
     same_succ_htab->remove_elt_with_hash (same, same->hashval);