https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91031
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The compound literal is consider an anonymous variable in the current scope. So in your case you take the address of it and then the scope ends but you access it afterwards. In previous versions of gcc, the compound literal was put in the function level scope rather than in the current scope. Which is why it worked previously. But the code was undefined. This was added to the changes page too.