aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr89710.c30
-rw-r--r--gcc/tree-ssa-loop-ch.c2
4 files changed, 42 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 86a2319..329954b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-03-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/89710
+ * tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Use
+ safe_dyn_cast.
+
2019-03-14 Martin Liska <mliska@suse.cz>
* coverage.c (coverage_begin_function): Stream also
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b0f9efa..3536cf1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2019-03-14 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/89710
+ * gcc.dg/torture/pr89710.c: New testcase.
+
+2019-03-14 Richard Biener <rguenther@suse.de>
+
PR middle-end/89698
* g++.dg/torture/pr89698.C: New testcase.
diff --git a/gcc/testsuite/gcc.dg/torture/pr89710.c b/gcc/testsuite/gcc.dg/torture/pr89710.c
new file mode 100644
index 0000000..01e875e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr89710.c
@@ -0,0 +1,30 @@
+/* { dg-do compile } */
+
+void
+gm (int *);
+
+__attribute__ ((returns_twice)) void
+jg (void)
+{
+}
+
+void
+eb (void)
+{
+ int r6 = 0;
+
+ if (r6 != 0)
+ gm (&r6);
+}
+
+void
+gm (int *r6)
+{
+ jg ();
+
+ for (;;)
+ {
+ eb ();
+ *r6 = 0;
+ }
+}
diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c
index f65e2b5..25f562b 100644
--- a/gcc/tree-ssa-loop-ch.c
+++ b/gcc/tree-ssa-loop-ch.c
@@ -100,7 +100,7 @@ should_duplicate_loop_header_p (basic_block header, struct loop *loop,
return false;
}
- gcond *last = dyn_cast <gcond *> (last_stmt (header));
+ gcond *last = safe_dyn_cast <gcond *> (last_stmt (header));
if (!last)
{
if (dump_file && (dump_flags & TDF_DETAILS))