Function core::intrinsics::raw_eq
const: unstable · source · pub unsafe extern "rust-intrinsic" fn raw_eq<T>(a: &T, b: &T) -> bool
core_intrinsics
)Expand description
Determines whether the raw bytes of the two values are equal.
This is particularly handy for arrays, since it allows things like just
comparing i96
s instead of forcing alloca
s for [6 x i16]
.
Above some backend-decided threshold this will emit calls to memcmp
,
like slice equality does, instead of causing massive code size.
Since this works by comparing the underlying bytes, the actual T
is
not particularly important. It will be used for its size and alignment,
but any validity restrictions will be ignored, not enforced.
Safety
It’s UB to call this if any of the bytes in *a
or *b
are uninitialized or carry a
pointer value.
Note that this is a stricter criterion than just the values being
fully-initialized: if T
has padding, it’s UB to call this intrinsic.
(The implementation is allowed to branch on the results of comparisons,
which is UB if any of their inputs are undef
.)