diff options
author | Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> | 2019-11-21 20:20:36 +0000 |
---|---|---|
committer | Prathamesh Kulkarni <prathamesh3492@gcc.gnu.org> | 2019-11-21 20:20:36 +0000 |
commit | b30e83f809b2aa65222eb969f8b4523e5e1961f2 (patch) | |
tree | 284504136e1dab0723aefe77d17043a04ea05754 /gcc | |
parent | d2993abd39aafb807d5d726f253c7ffe8af6fa41 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr92608.c | 25 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-unswitch.c | 2 |
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); |