From: Richard Biener Date: Thu, 9 Jun 2016 11:36:22 +0000 (+0000) Subject: re PR tree-optimization/71462 (gcc ICE at -O3 on valid code on x86_64-linux-gnu... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=36d579866680fd2b45800b072527a9cce93235d0;p=gcc.git 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 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3484047c15c..134f2249396 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-06-09 Richard Biener + + PR tree-optimization/71462 + * tree-ssa-loop-manip.c (find_uses_to_rename): Guard against + removed blocks. + 2016-06-09 Martin Liska * predict.c (filter_predictions): New function. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 844f0f5e0c7..8ee01b77e85 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-06-09 Richard Biener + + PR tree-optimization/71462 + * gcc.dg/torture/pr71462.c: New testcase. + 2016-06-09 Marek Polacek 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 00000000000..390b88673e3 --- /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 77c5eb49f14..e87d29055d9 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);