make std::intrinsics functions actually be intrinsics by RalfJung · Pull Request #139916 · rust-lang/rust (original) (raw)
make std::intrinsic functions actually be intrinsics
Most of the functions in std::intrinsics
are actually intrinsics, but some are not: for historical reasons, std::intrinsics::{copy,copy_nonoverlapping,write_bytes}
are accessible on stable, and the versions in std::ptr
are just re-exports. These functions are not intrinsics, but wrappers around the intrinsic, because they add extra debug assertions.
This PR makes the functions in std::intrinsics
actually be intrinsics.
- The advantage is that we can now use it in tests that need to directly call the intrinsic, thus removing a footgun for compiler development. We also remove the extended user-facing doc comments of these functions out of a file that should be largely internal documentation.
- The downside is that if users are using those functions directly, they will not get the debug assertions any more. Note however that those users are already ignoring a deprecation warning, so I think this is fine. Furthermore, if someone imports the
intrinsic
name of this function and turns that into a function pointer, that will no longer work, since only the wrapper functions can be turned into a function pointer. I would be rather surprised if anyone did this, though... and again, they must have already ignored a deprecation warning. Still, seems worth a crater run, if there's general agreement that we want to go ahead with this change.
(intrinsics::drop_in_place
also remains not-an-intrinsic, which bugs me, but oh well, not much we can do about it; we can't remove it from the module as the path is accidentally-stable.)
Cc @rust-lang/libs-api
@saethlin