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).