On Mon, 17 Jun 2019, Jan Hubicka wrote: > > > > Hmm, !maybe_eq () -> ! max_size1 == size1 -> max_size != size1 thus > > I think && is correct if you want to disambiguate a[1].v2 and a[i].v1 > > > > But yes, if you don't want that then || is cheaper. Probably add > > another testcase with one of the accesses with a constant index? > > Hmm, OK, without unions I do not see how I could disambiguate something > with || and not &&. > Do we care about the testcase with union and constant accesses I sent?
Wouldn't it be as simple as struct S { int i; int j; }; struct S a[10]; and a[i].i vs. a[1].j? The first has offset = 0, max_size = sizeof(a)-4 while the second has offset = 12, max_size = 4 and thus they overlap. Richard.