The constructors for VolatilePtr and VolatileRef require the passed pointer to be valid. I am guessing that this is because Rust historically only allowed volatile accesses through valid pointers. Since 1.90, volatile accesses can be performed on pointers that are not valid (with some restrictions) PR, changelog, docs. If there is no longer a reason to have these restrictions, it would be nice to drop them.