http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55060



Richard Biener <rguenth at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|UNCONFIRMED                 |NEW

   Last reconfirmed|                            |2012-10-25

                 CC|                            |jamborm at gcc dot gnu.org

     Ever Confirmed|0                           |1



--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> 2012-10-25 
11:22:40 UTC ---

At the point of the early uninit pass it sees:



main (int argc, char * * argv)

{

  int i;

  int D.1716;

  int i.0;



<bb 2>:

  a.isra.0 ();

  # VUSE <.MEM_3(D)>

  i.0_1 = i;

  b.isra.1 ();

  D.1716_2 = 0;

  # .MEM_4 = VDEF <.MEM_3(D)>

  i ={v} {CLOBBER};

  # VUSE <.MEM_4>

  return D.1716_2;



thus a read from the memory location 'i' which is uninitialized.  Dead code

elimination has not yet removed that read (i.0_1 is unused after all).



I'd say the literal presence of b (i) is considered a use of i in C-terms,

thus the warning is not really incorrect.



That IPA-SRA has this side-effect on the otherwise still unoptimized

body of main is bad - early uninit was put before early inlining for a reason

and now IPA-SRA defeats this ... can we make it more "IPA" like and

have an explicit local transform stage?

Reply via email to