------- Comment #4 from rguenth at gcc dot gnu dot org  2010-02-27 21:33 -------
This is because

  p = 0;

is not detected as dead store by tree DSE as in

  p = 0;
  r = *q;
  p = (T *) t[0];

*q may load from p because with LTO TBAA rules for pointers have been
relaxed (for a reason but also in a somewhat simple manner).  With
non-LTO void * and void ** have different alias-sets, with LTO they
do not (as especially mismatching void * and void ** is a very common
error that would lead to many spurious miscompiles with LTO).

Note that we really can't optimize this testcase without using TBAA
and by design we do not.


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
           Keywords|                            |alias
         Resolution|                            |WONTFIX


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

Reply via email to