There is a big difference between declaring and assigning a 32-bit pointer and actual use. In other words, dereferencing a pointer. If you do this in a 64-bit process, then there is no other option but to sign it before the 64-bit pointer. This is what coercion means. This may happen by accident, but you must be very lucky. It just doesn't make sense to try.
The __ptr32 declaration point is described in this related answer, it only makes sense when interacting with a 32-bit process. Which uses 32-bit pointers. This is not often.
source share