Now, obviously, we never read or write zero-sized things -- but
different alias sets also implies that &x != &y which is false.
I don't think so.
Consider the Ada record:
type r is record
f1: integer;
f2: string (1..0);
f3: float;
end record;
F2 and F3 will have different alias sets, but every instance of F2 and F3
will be at the same address.