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.