diff options
author | Richard Biener <rguenther@suse.de> | 2019-03-14 11:07:41 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-03-14 11:07:41 +0000 |
commit | df6d3ac9aa35d4d9cd23bc70e961490c19e2477d (patch) | |
tree | 846613006cd671c38f2d4ebf47e4ba24543a3186 | |
parent | b81547179688b601af97fc2185489dbea1cd86b2 (diff) | |
download | gcc-df6d3ac9aa35d4d9cd23bc70e961490c19e2477d.zip gcc-df6d3ac9aa35d4d9cd23bc70e961490c19e2477d.tar.gz gcc-df6d3ac9aa35d4d9cd23bc70e961490c19e2477d.tar.bz2 |
re PR tree-optimization/89710 (ICE in dyn_cast<gcond*, gimple>(gimple*) / should_duplicate_loop_header_p)
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.
* gcc.dg/torture/pr89710.c: New testcase.
From-SVN: r269679
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr89710.c | 30 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-ch.c | 2 |
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)) |