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

--- Comment #4 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
This happens only on i686-mingw32 because this requires SJLJ exceptions.  The
loop at stake is marked for removal during EH generation:

#0  mark_loop_for_removal (loop=0x7ffff6969ca8)
    at /home/eric/svn/gcc/gcc/cfgloop.c:1933
#1  0x0000000000da97e2 in sjlj_emit_dispatch_table (
    dispatch_label=0x7ffff6a4cec0, num_dispatch=6)
    at /home/eric/svn/gcc/gcc/except.c:1394
#2  0x0000000000da9bbe in sjlj_build_landing_pads ()
    at /home/eric/svn/gcc/gcc/except.c:1463
#3  0x0000000000da9d2d in finish_eh_generation ()
    at /home/eric/svn/gcc/gcc/except.c:1497
#4  0x0000000000c7bd4c in (anonymous namespace)::pass_expand::execute (
    this=0x39e6e60, fun=0x7ffff6924a80)
    at /home/eric/svn/gcc/gcc/cfgexpand.c:6005

        /* ???  For multiple dispatches we will end up with edges
           from the loop tree root into this loop, making it a
           multiple-entry loop.  Discard all affected loops.  */
        if (num_dispatch > 1)
          {
        for (loop = bb->loop_father;
             loop_outer (loop); loop = loop_outer (loop))
          mark_loop_for_removal (loop);
          }

but it is marked *twice* so loop->former_header is cleared the second time:

void
mark_loop_for_removal (loop_p loop)
{
  loop->former_header = loop->header;
  loop->header = NULL;
  loop->latch = NULL;
  loops_state_set (LOOPS_NEED_FIXUP);
}

The ICE occurs immediately after:

#0  internal_error (gmsgid=0x2ea5d27 "in %s, at %s:%d")
    at /home/eric/svn/gcc/gcc/diagnostic.c:1219
#1  0x00000000028a1772 in fancy_abort (
    file=0x2a09ca0 "/home/eric/svn/gcc/gcc/loop-init.c", line=263, 
    function=0x2a0a100 <fix_loop_structure(bitmap_head*)::__FUNCTION__>
"fix_loop_structure") at /home/eric/svn/gcc/gcc/diagnostic.c:1275
#2  0x000000000102a1cd in fix_loop_structure (changed_bbs=0x0)
    at /home/eric/svn/gcc/gcc/loop-init.c:263
#3  0x00000000026b48d9 in cleanup_cfg (mode=16)
    at /home/eric/svn/gcc/gcc/cfgcleanup.c:3083

Reply via email to