https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68017
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2015-10-20 Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Summary|ICE on valid code at -O3 |[5 Regression] ICE on valid |with -g enabled on |code at -O3 with -g enabled |x86_64-linux-gnu: cannot |on x86_64-linux-gnu: cannot |update SSA form |update SSA form Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. tailcall does /* Remove the code after call_gsi that will become unreachable. The possibly unreachable code in other blocks is removed later in cfg cleanup. */ gsi = t->call_gsi; gsi_next (&gsi); while (!gsi_end_p (gsi)) { gimple *t = gsi_stmt (gsi); /* Do not remove the return statement, so that redirect_edge_and_branch sees how the block ends. */ if (gimple_code (t) == GIMPLE_RETURN) break; gsi_remove (&gsi, true); release_defs (t); } but for proper debug handling it needs to remove the stmts backwards.