https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100923

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
The bug is that PTA computes

  <bb 3> :
  *j_15(D) = &l;
  # PT = null
  _2 = *j_15(D);
  # PT = null
  _3 = *_2;

and VN (in)correctly value-numbers the later load from 'l' to _3, pulling
the points-to info into the alias test.  PTA does not generate a constraint
for

  *j_15(D) = &l;

where *null = &l is thrown away early and

  _2 = *j_15(D);

_2 = *null as well.  So _2 remains empty thus _3 as well.

We thus enter the alias-oracle with a valueized ref that looks like
__MEM (_3) via ao_ref_init_from_vn_reference which fails to consider
availability here.

Not sure why -fno-strict-aliasing "works", it looks like we fail to
value-number the load from 'l' for some reason.

It's going to be a bit awkward to fix, but maybe it's not too bad.

Reply via email to