Skip to content

Commit 0fcc406

Browse files
committed
Fix pointer mutability casts and safety lints
1 parent e5db1ec commit 0fcc406

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

crates/core_simd/src/cast.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,45 @@
11
use crate::simd::SimdElement;
22

33
/// Supporting trait for `Simd::cast`. Typically doesn't need to be used directly.
4+
///
5+
/// # Safety
6+
/// Implementing this trait asserts that the type is a valid vector element for the `simd_cast` or
7+
/// `simd_as` intrinsics.
48
pub unsafe trait SimdCast: SimdElement {}
59

10+
// Safety: primitive number types can be cast to other primitive number types
611
unsafe impl SimdCast for i8 {}
12+
// Safety: primitive number types can be cast to other primitive number types
713
unsafe impl SimdCast for i16 {}
14+
// Safety: primitive number types can be cast to other primitive number types
815
unsafe impl SimdCast for i32 {}
16+
// Safety: primitive number types can be cast to other primitive number types
917
unsafe impl SimdCast for i64 {}
18+
// Safety: primitive number types can be cast to other primitive number types
1019
unsafe impl SimdCast for isize {}
20+
// Safety: primitive number types can be cast to other primitive number types
1121
unsafe impl SimdCast for u8 {}
22+
// Safety: primitive number types can be cast to other primitive number types
1223
unsafe impl SimdCast for u16 {}
24+
// Safety: primitive number types can be cast to other primitive number types
1325
unsafe impl SimdCast for u32 {}
26+
// Safety: primitive number types can be cast to other primitive number types
1427
unsafe impl SimdCast for u64 {}
28+
// Safety: primitive number types can be cast to other primitive number types
1529
unsafe impl SimdCast for usize {}
30+
// Safety: primitive number types can be cast to other primitive number types
1631
unsafe impl SimdCast for f32 {}
32+
// Safety: primitive number types can be cast to other primitive number types
1733
unsafe impl SimdCast for f64 {}
1834

1935
/// Supporting trait for `Simd::cast_ptr`. Typically doesn't need to be used directly.
36+
///
37+
/// # Safety
38+
/// Implementing this trait asserts that the type is a valid vector element for the `simd_cast_ptr`
39+
/// intrinsic.
2040
pub unsafe trait SimdCastPtr: SimdElement {}
2141

42+
// Safety: pointers can be cast to other pointer types
2243
unsafe impl<T> SimdCastPtr for *const T {}
44+
// Safety: pointers can be cast to other pointer types
2345
unsafe impl<T> SimdCastPtr for *mut T {}

crates/core_simd/src/elements/const_ptr.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ where
8686

8787
#[inline]
8888
fn as_mut(self) -> Self::MutPtr {
89-
unsafe { intrinsics::simd_cast_ptr(self) }
89+
self.cast_ptr()
9090
}
9191

9292
#[inline]
@@ -111,11 +111,13 @@ where
111111

112112
#[inline]
113113
fn expose_addr(self) -> Self::Usize {
114+
// Safety: `self` is a pointer vector
114115
unsafe { intrinsics::simd_expose_addr(self) }
115116
}
116117

117118
#[inline]
118119
fn from_exposed_addr(addr: Self::Usize) -> Self {
120+
// Safety: `self` is a pointer vector
119121
unsafe { intrinsics::simd_from_exposed_addr(addr) }
120122
}
121123

crates/core_simd/src/elements/mut_ptr.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ where
8181

8282
#[inline]
8383
fn as_const(self) -> Self::ConstPtr {
84-
unimplemented!()
85-
//self.cast()
84+
self.cast_ptr()
8685
}
8786

8887
#[inline]
@@ -107,11 +106,13 @@ where
107106

108107
#[inline]
109108
fn expose_addr(self) -> Self::Usize {
109+
// Safety: `self` is a pointer vector
110110
unsafe { intrinsics::simd_expose_addr(self) }
111111
}
112112

113113
#[inline]
114114
fn from_exposed_addr(addr: Self::Usize) -> Self {
115+
// Safety: `self` is a pointer vector
115116
unsafe { intrinsics::simd_from_exposed_addr(addr) }
116117
}
117118

0 commit comments

Comments
 (0)