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.

Reply via email to