Progress
Details
Credit to @djkoloski for noticing this issue.
Currently, the Ptr type's internal invariants require that the pointer point to a valid allocation. However, the ptr module docs imply that zero-sized accesses do not require a pointer to a valid allocation. This is problematic for us, since it implies that Rust could generate a reference to a ZST which does not point to an allocation. Thus, our impl of From<&T> for Ptr<T> might be unsound (albeit in a way that isn't currently exercisable): it promises that, based on the fact that &T is a reference, it must refer to a valid allocation. If T is a ZST, that implication might not hold.
We should do the following:
Progress
Details
Credit to @djkoloski for noticing this issue.
Currently, the
Ptrtype's internal invariants require that the pointer point to a valid allocation. However, theptrmodule docs imply that zero-sized accesses do not require a pointer to a valid allocation. This is problematic for us, since it implies that Rust could generate a reference to a ZST which does not point to an allocation. Thus, our impl ofFrom<&T> for Ptr<T>might be unsound (albeit in a way that isn't currently exercisable): it promises that, based on the fact that&Tis a reference, it must refer to a valid allocation. IfTis a ZST, that implication might not hold.We should do the following: