@@ -2799,6 +2799,10 @@ pub(crate) use assert_unsafe_precondition;
27992799
28002800/// Checks whether `ptr` is properly aligned with respect to
28012801/// `align_of::<T>()`.
2802+ ///
2803+ /// In `const` this is approximate and can fail spuriously. It is primarily intended
2804+ /// for `assert_unsafe_precondition!` with `check_language_ub`, in which case the
2805+ /// check is anyway not executed in `const`.
28022806#[ inline]
28032807pub ( crate ) const fn is_aligned_and_not_null ( ptr : * const ( ) , align : usize ) -> bool {
28042808 !ptr. is_null ( ) && ptr. is_aligned_to ( align)
@@ -2813,10 +2817,10 @@ pub(crate) const fn is_valid_allocation_size(size: usize, len: usize) -> bool {
28132817/// Checks whether the regions of memory starting at `src` and `dst` of size
28142818/// `count * size` do *not* overlap.
28152819///
2816- /// # Safety
2817- /// This function must only be called such that if it returns false, we will execute UB .
2820+ /// Note that in const-eval this function just returns `true` and therefore must
2821+ /// only be used with `assert_unsafe_precondition!`, similar to `is_aligned_and_not_null` .
28182822#[ inline]
2819- pub ( crate ) const unsafe fn is_nonoverlapping (
2823+ pub ( crate ) const fn is_nonoverlapping (
28202824 src : * const ( ) ,
28212825 dst : * const ( ) ,
28222826 size : usize ,
@@ -2842,7 +2846,7 @@ pub(crate) const unsafe fn is_nonoverlapping(
28422846 true
28432847 }
28442848
2845- #[ cfg_attr( not( bootstrap) , allow( unused_unsafe) ) ]
2849+ #[ cfg_attr( not( bootstrap) , allow( unused_unsafe) ) ] // on bootstrap bump, remove unsafe block
28462850 // SAFETY: This function's precondition is equivalent to that of `const_eval_select`.
28472851 // Programs which do not execute UB will only see this function return `true`, which makes the
28482852 // const and runtime implementation indistinguishable.
@@ -2962,8 +2966,7 @@ pub const unsafe fn copy_nonoverlapping<T>(src: *const T, dst: *mut T, count: us
29622966 ) =>
29632967 is_aligned_and_not_null( src, align)
29642968 && is_aligned_and_not_null( dst, align)
2965- // SAFETY: If this returns false, we're about to execute UB.
2966- && unsafe { is_nonoverlapping( src, dst, size, count) }
2969+ && is_nonoverlapping( src, dst, size, count)
29672970 ) ;
29682971
29692972 // SAFETY: the safety contract for `copy_nonoverlapping` must be
0 commit comments