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.

Reply via email to