Conversation

Replying to and
It can't cheat by wrapping all the around and back into the same object. It's a bit silly that the safe one is called wrapping_add because allowing wrapping is only one of the things it allows. Note that ptr::wrapping_add is safe and ptr::add is unsafe due to the UB.
1
1
Replying to and
It's UB to deference a pointer outside the bounds of the object it was derived from regardless of which one you use. The purpose of ptr::add is that it's also undefined to create the pointer outside bounds of the object which enables optimizations even if load isn't right there.
1
Replying to
FWIW, I was just trying to show that the section was based on the LLVM IR specification. I think I likely wrote the initial version of it when I was working on closing these soundness holes in the standard library. Around same time as adding isize::MAX object size limit.