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

--- Comment #17 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
FWIW, the removal happens by virtue of:

  /* The hash table traversals above created the duplicate blocks (and the
     statements within the duplicate blocks).  This loop creates PHI nodes for
     the duplicated blocks and redirects the incoming edges into BB to reach
     the duplicates of BB.  */
  redirection_data->traverse <ssa_local_info_t *, ssa_redirect_edges>
                (&local_info);

and right after the PHI is getting cleared, the BB has:

<bb 48>:
 pred:      
# .MEM_34 = PHI <>
# SR.33_45 = PHI <>
# SR.32_86 = PHI <>
# DEBUG this => D#8
goto <bb 47>;
 succ:       47 [69.8%]  (FALLTHRU,EXECUTABLE)

Notice the empty `pred', which would indicate to me a block that is
unreachable.

Looking at the tree dump for the rest of the function
(Track::prep_record_enabled(bool, void*)), I see no branches or fall-thrus to
BB 48, so yes... it has become unreachable and should be cleaned up, but the
ICEing code is the one that can't handle empty PHI.

Reply via email to