Fixes the simple testcase:
struct S00 {
char mC_0; short mS_1; int mI_2; int mI_3;
};
struct S03 {
short mS_0; struct S00 mS00_1[4]; short mS_2;
};
int test_s03c(struct S03* a, struct S03* b)
{
a->mS00_1[0].mI_2=1; b->mS00_1[1].mI_2=2; return a->mS00_1[0].mI_2;
}
so that we return 1.
I really don't understand this comment, either from "actual" or "reason about the offsets directly".
Looking at the uses, I don't see any reason not to use llvm::isIdentifiedObject. I think what you need to know is that [V, V+Offset] does not overlap any other object. isIdentifiedObject should be sufficient for that.