On Tue, 21 Jan 2020, Alexander Monakov wrote: > My intent was more basic. I observed that the paragraph can be interpreted as > saying that if you have a cast 'I1 = (intptr_t) P1', then perform some > computations on I1 that do not in any way depend on values of other pointers, > then casting the result back can not point to a different object than P1.
Yes. I don't think the wording in the existing standard (where anything other than casting the same integer value back to pointer type - and, furthermore, the result is only specified to compare equal to the original pointer, not to be otherwise usable in place of it) can distinguish that version (PVI) from PNVI. > But that is not very helpful, because this is the case where the user > might have used normal pointer arithmetic in the first place. I think a typical use case of intptr_t might be e.g. masking off low bits of a pointer value for alignment while remaining within the same object. Another one might be to compare pointers to different objects in implementing memmove-like functions, where ordered pointer comparison would not be defined in ISO C. > I think that the case discussed in the proposed patch is already not ambiguous > and does not need further clarifications to the standard. I don't think such a requirement for PNVI can be deduced from the existing text. -- Joseph S. Myers jos...@codesourcery.com