@@ -3940,6 +3940,21 @@ pub const fn is_val_statically_known<T: Copy>(_arg: T) -> bool {
39403940 false
39413941}
39423942
3943+ #[ rustc_nounwind]
3944+ #[ inline]
3945+ #[ rustc_intrinsic]
3946+ #[ rustc_intrinsic_const_stable_indirect]
3947+ #[ rustc_allow_const_fn_unstable( const_swap_nonoverlapping) ] // this is anyway not called since CTFE implements the intrinsic
3948+ #[ cfg( bootstrap) ]
3949+ pub const unsafe fn typed_swap < T > ( x : * mut T , y : * mut T ) {
3950+ // SAFETY: The caller provided single non-overlapping items behind
3951+ // pointers, so swapping them with `count: 1` is fine.
3952+ unsafe { ptr:: swap_nonoverlapping ( x, y, 1 ) } ;
3953+ }
3954+
3955+ #[ cfg( bootstrap) ]
3956+ pub use typed_swap as typed_swap_nonoverlapping;
3957+
39433958/// Non-overlapping *typed* swap of a single value.
39443959///
39453960/// The codegen backends will replace this with a better implementation when
@@ -3953,10 +3968,10 @@ pub const fn is_val_statically_known<T: Copy>(_arg: T) -> bool {
39533968#[ rustc_nounwind]
39543969#[ inline]
39553970#[ rustc_intrinsic]
3956- // Const-unstable because `swap_nonoverlapping` is const-unstable.
39573971#[ rustc_intrinsic_const_stable_indirect]
39583972#[ rustc_allow_const_fn_unstable( const_swap_nonoverlapping) ] // this is anyway not called since CTFE implements the intrinsic
3959- pub const unsafe fn typed_swap < T > ( x : * mut T , y : * mut T ) {
3973+ #[ cfg( not( bootstrap) ) ]
3974+ pub const unsafe fn typed_swap_nonoverlapping < T > ( x : * mut T , y : * mut T ) {
39603975 // SAFETY: The caller provided single non-overlapping items behind
39613976 // pointers, so swapping them with `count: 1` is fine.
39623977 unsafe { ptr:: swap_nonoverlapping ( x, y, 1 ) } ;
0 commit comments