diff options
author | Richard Biener <rguenther@suse.de> | 2016-06-09 11:36:22 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-06-09 11:36:22 +0000 |
commit | 36d579866680fd2b45800b072527a9cce93235d0 (patch) | |
tree | c028de2d47057c578a04ccd9b7a702936daa9cd4 /gcc | |
parent | 28cd6814b5bf87cb65505df85c326f7a1975a60d (diff) | |
download | gcc-36d579866680fd2b45800b072527a9cce93235d0.zip gcc-36d579866680fd2b45800b072527a9cce93235d0.tar.gz gcc-36d579866680fd2b45800b072527a9cce93235d0.tar.bz2 |
re PR tree-optimization/71462 (gcc ICE at -O3 on valid code on x86_64-linux-gnu with “seg fault”)
2016-06-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/71462
* tree-ssa-loop-manip.c (find_uses_to_rename): Guard against
removed blocks.
* gcc.dg/torture/pr71462.c: New testcase.
From-SVN: r237254
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/pr71462.c | 28 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-manip.c | 7 |
4 files changed, 44 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3484047..134f224 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-06-09 Richard Biener <rguenther@suse.de> + + PR tree-optimization/71462 + * tree-ssa-loop-manip.c (find_uses_to_rename): Guard against + removed blocks. + 2016-06-09 Martin Liska <mliska@suse.cz> * predict.c (filter_predictions): New function. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 844f0f5..8ee01b7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-06-09 Richard Biener <rguenther@suse.de> + + PR tree-optimization/71462 + * gcc.dg/torture/pr71462.c: New testcase. + 2016-06-09 Marek Polacek <polacek@redhat.com> PR c/65471 diff --git a/gcc/testsuite/gcc.dg/torture/pr71462.c b/gcc/testsuite/gcc.dg/torture/pr71462.c new file mode 100644 index 0000000..390b886 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr71462.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ + +short a; +long b; +void fn1() +{ + int c = a = 1; + for (; a; a++) + { + for (; 9 <= 8;) + for (;;) { + a = 20; + for (; a <= 35; a++) + ; +line:; + } + if ((c += 264487869) == 9) + { + unsigned *d = 0; + for (; b;) + d = (unsigned *)&c; + if (d) + for (;;) + ; + } + } + goto line; +} diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c index 77c5eb4..e87d290 100644 --- a/gcc/tree-ssa-loop-manip.c +++ b/gcc/tree-ssa-loop-manip.c @@ -472,8 +472,11 @@ find_uses_to_rename (bitmap changed_bbs, bitmap *use_blocks, bitmap need_phis, if (changed_bbs) EXECUTE_IF_SET_IN_BITMAP (changed_bbs, 0, index, bi) - find_uses_to_rename_bb (BASIC_BLOCK_FOR_FN (cfun, index), use_blocks, - need_phis, use_flags); + { + bb = BASIC_BLOCK_FOR_FN (cfun, index); + if (bb) + find_uses_to_rename_bb (bb, use_blocks, need_phis, use_flags); + } else FOR_EACH_BB_FN (bb, cfun) find_uses_to_rename_bb (bb, use_blocks, need_phis, use_flags); |