https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65752
--- Comment #58 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Richard Biener from comment #49) > Related testcase from PR61502: > > #include <stdio.h> > > int main() > { > int x, y = 1; > int *volatile v; > int *p; > > v = &y; > p = v; > if (p == &x + 1) { > *p = 2; > printf("y = %d\n", y); > } > } > > which shows how propagating conditional equivalences (&x+1 into *p = 2) > breaks > alias analysis. We now optimize the comparison to false via ptrs_compare_unequal given &x + 1 has provenance &x and p has provenance &y. Thus we decided to ignore that sub-sentence of the standard that seems to allow comparing such pointers. So we behave as-if we'd put at least one byte of padding after each object.