Hi, On Thu, 30 Jan 2020, Michael Matz wrote:
> > and the pointers have the same address, then it would evaluate to true > > at run-time. If I understand correctly, you somehow want to make this > > case be UB, but I haven't quite understood how (if it is not the > > comparison of such pointers that invokes UB). > > By saying something like "if two pointers compare equal they must have > the same provenance, otherwise the behaviour is undefined". > > (I don't know if this definition would or would not help with the > problems PVNI poses to compilers). Or, actually I know at least one case. The problem with allowing value-equivalent pointers to have non-overlapping provenance is the following: many of the compiler optimizations are based on as-if rules. Now, if it's very easy for users to detect certain situations, that means that the as-if rules can't be invoked as often. In this specific instance, if the user writes a program where the compiler would optimize mem accesses based on non-overlapping provenance (e.g. a stored value is propagated downwards over a store of different provenance), and then somewhere else also compares these non-overlapping pointers for equality, and then, if they are equal prints out "hah! invalid optimization detected", and the outcome of the comparison of non-overlapping pointers weren't left unspecified, then that's the reason why the compiler would have to globally disable the first optimization (at least when it can't prove that there aren't any such comparisons). Ideally we don't want that :) Ciao, Michael.