aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPrathamesh Kulkarni <prathamesh.kulkarni@linaro.org>2019-11-21 20:20:36 +0000
committerPrathamesh Kulkarni <prathamesh3492@gcc.gnu.org>2019-11-21 20:20:36 +0000
commitb30e83f809b2aa65222eb969f8b4523e5e1961f2 (patch)
tree284504136e1dab0723aefe77d17043a04ea05754 /gcc
parentd2993abd39aafb807d5d726f253c7ffe8af6fa41 (diff)
downloadgcc-b30e83f809b2aa65222eb969f8b4523e5e1961f2.zip
gcc-b30e83f809b2aa65222eb969f8b4523e5e1961f2.tar.gz
gcc-b30e83f809b2aa65222eb969f8b4523e5e1961f2.tar.bz2
Use safe_dyn_cast instead of dyn_cast in find_loop_guard to fix PR92608.
2019-11-22 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR tree-optimization/92608 * tree-ssa-loop-unswitch.c (find_loop_guard): Use safe_dyn_cast instead of dyn_cast. testsuite/ * gcc.dg/torture/pr92608.c: New test. From-SVN: r278598
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr92608.c25
-rw-r--r--gcc/tree-ssa-loop-unswitch.c2
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2525bcd..ab77792 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-11-22 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ PR tree-optimization/92608
+ * tree-ssa-loop-unswitch.c (find_loop_guard): Use safe_dyn_cast instead
+ of dyn_cast.
+
2019-11-21 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/predicates.md (extra_insn_branch_comparison_operator):
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7916f1a..48bf697 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-22 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ PR tree-optimization/92608
+ * gcc.dg/torture/pr92608.c: New test.
+
2019-11-21 Iain Sandoe <iain@sandoe.co.uk>
PR testsuite/92619
diff --git a/gcc/testsuite/gcc.dg/torture/pr92608.c b/gcc/testsuite/gcc.dg/torture/pr92608.c
new file mode 100644
index 0000000..3a6beab
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr92608.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-funswitch-loops" } */
+
+int op, bs;
+
+void
+q0 (void)
+{
+ op += 1 % (op == bs);
+}
+
+void __attribute__ ((returns_twice))
+co (void)
+{
+}
+
+void __attribute__ ((simd))
+uq (void)
+{
+ q0 ();
+ co ();
+
+ while (bs < 1)
+ ++bs;
+}
diff --git a/gcc/tree-ssa-loop-unswitch.c b/gcc/tree-ssa-loop-unswitch.c
index 49951eb..dbca642 100644
--- a/gcc/tree-ssa-loop-unswitch.c
+++ b/gcc/tree-ssa-loop-unswitch.c
@@ -586,7 +586,7 @@ find_loop_guard (class loop *loop)
next = single_succ (header);
else
{
- cond = dyn_cast <gcond *> (last_stmt (header));
+ cond = safe_dyn_cast <gcond *> (last_stmt (header));
if (! cond)
return NULL;
extract_true_false_edges_from_block (header, &te, &fe);