@@ -3940,6 +3940,21 @@ pub const fn is_val_statically_known<T: Copy>(_arg: T) -> bool {
3940
3940
false
3941
3941
}
3942
3942
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
+
3943
3958
/// Non-overlapping *typed* swap of a single value.
3944
3959
///
3945
3960
/// 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 {
3953
3968
#[ rustc_nounwind]
3954
3969
#[ inline]
3955
3970
#[ rustc_intrinsic]
3956
- // Const-unstable because `swap_nonoverlapping` is const-unstable.
3957
3971
#[ rustc_intrinsic_const_stable_indirect]
3958
3972
#[ 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 ) {
3960
3975
// SAFETY: The caller provided single non-overlapping items behind
3961
3976
// pointers, so swapping them with `count: 1` is fine.
3962
3977
unsafe { ptr:: swap_nonoverlapping ( x, y, 1 ) } ;
0 commit comments