https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101437
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|c |middle-end --- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #3) > The ICE is because since the above change when we see the empty type > volatile *p = s; store, we gimplify it as s and *p (which seems wrong for > volatiles, because that is load from *p instead of store to *p) and that *p > is gimplified as read from *p into a temporary vol.0 and hits the same case, > where we when we try to gimplify for vol.0 = *p the from_p part *p, we > gimplify it as vol.1 = *p and like that until we eat all of the stack. At first I was trying to understand why a change from zero-sized to empty check would cause a problem but this make sense now. Basically before it was not a zero-sized struct but still empty. And now with the change we go in circles.