> 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.
Ha, you are right of course (and in fact similar testcases was why I started to look into this :) Honza