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.

Reply via email to