https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118918
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code Target Milestone|--- |12.5 Known to work| |7.5.0, 8.4.0 Status|UNCONFIRMED |NEW Last reconfirmed| |2025-02-18 Ever confirmed|0 |1 CC| |jsm28 at gcc dot gnu.org Known to fail| |10.5.0, 11.5.0, 12.4.0, | |14.2.0, 15.0, 9.5.0 Summary|Miscompile at -Os |[12./13/14/15 Regression] | |Miscompile at -Os --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. Somehow we lose the 'e' initializer: if (h != 0) { { long int D.2841[1] = {2}; e = (long int *) &<<< Unknown tree: compound_literal_expr long int D.2841[1] = {2}; >>>; } } else { { long int D.2842[2] = {2, 8}; e = (long int *) &<<< Unknown tree: compound_literal_expr long int D.2842[2] = {2, 8}; >>>; } } the scope of D.2841/D.2842 are at issue here. I do remember some change in GCC extension behavior though, so this might be invalid.