From: Richard Biener Date: Thu, 27 Nov 2014 09:57:13 +0000 (+0000) Subject: re PR middle-end/64083 (ICE: in fix_loop_structure, at loop-init.c:252 compiling... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e311c2d89a3bb45fe65e384126699dbaa2f57fdf;p=gcc.git re PR middle-end/64083 (ICE: in fix_loop_structure, at loop-init.c:252 compiling Linux Kernel) 2014-11-27 Richard Biener PR tree-optimization/64083 * tree-ssa-threadupdate.c (thread_through_all_blocks): Do not forcibly mark loop for removal the wrong way. * gcc.dg/torture/pr64083.c: New testcase. From-SVN: r218115 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 999686f6ee1..71828c2299d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-11-27 Richard Biener + + PR tree-optimization/64083 + * tree-ssa-threadupdate.c (thread_through_all_blocks): Do not + forcibly mark loop for removal the wrong way. + 2014-11-27 Richard Biener PR middle-end/63704 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5e671fa92fe..5fc10c2b794 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-11-27 Richard Biener + + PR tree-optimization/64083 + * gcc.dg/torture/pr64083.c: New testcase. + 2014-11-27 Richard Biener PR tree-optimization/61634 diff --git a/gcc/testsuite/gcc.dg/torture/pr64083.c b/gcc/testsuite/gcc.dg/torture/pr64083.c new file mode 100644 index 00000000000..3c3e5a6087a --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr64083.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ + +int a, b; +void +fn1 () +{ + int c = 0; + while (b) + { + switch (c) + case 1: + fn1 (); + if (a) + c = 1; + b = 0; + } +} diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c index ca0b8bfdd4b..a8243aea68a 100644 --- a/gcc/tree-ssa-threadupdate.c +++ b/gcc/tree-ssa-threadupdate.c @@ -2428,16 +2428,8 @@ thread_through_all_blocks (bool may_peel_loop_headers) /* Our path is still valid, thread it. */ if (e->aux) { - struct loop *loop = (*path)[0]->e->dest->loop_father; - if (thread_block ((*path)[0]->e->dest, false)) - { - /* This jump thread likely totally scrambled this loop. - So arrange for it to be fixed up. */ - loop->header = NULL; - loop->latch = NULL; - e->aux = NULL; - } + e->aux = NULL; else { delete_jump_thread_path (path);