Pointers Are Complicated II, or: We need better language specs just because two pointers point to the same address, does not mean they are equal in the sense that they can be used interchangeably. This “extra information” that distinguishes different pointers to the same address is typically called provenance. This post is another attempt to convince you that provenance is “real”, by telling a cautionary tale of what can go wrong when provenance is not considered sufficiently carefully in an optimizing compiler. The post is self-contained; I am not assuming that you have read the fir...