https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71366

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-06-01
   Target Milestone|---                         |7.0
            Summary|ICE on valid code at -O3 on |[7 Regression] ICE on valid
                   |x86_64-linux-gnu:           |code at -O3 on
                   |Segmentation fault          |x86_64-linux-gnu:
                   |                            |Segmentation fault
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.

Program received signal SIGSEGV, Segmentation fault.
0x00000000008f7b16 in vec<loop*, va_gc, vl_embed>::length (
    this=0xa5a5a5a5a5a5a5a5) at /space/rguenther/src/svn/trunk/gcc/vec.h:453
453       unsigned length (void) const { return m_vecpfx.m_num; }

looks like the loop struct is ggc_freed.

1309      if (canonicalize_loop_induction_variables
1310            (loop, false, ul, !flag_tree_loop_ivcanon))
(gdb) l
1311        {
1312          /* If we'll continue unrolling, we need to propagate constants
1313             within the new basic blocks to fold away induction variable
1314             computations; otherwise, the size might blow up before the
1315             iteration is complete and the IR eventually cleaned up.  */
1316          if (loop_outer (loop_father) && !loop_father->aux)
1317            {
1318              father_stack.safe_push (loop_father);
1319              loop_father->aux = loop_father;

loop_outer (loop) != loop_father here.  That's odd (and unexpected, it will
break the iteration scheme).

Reply via email to