Adjust clippy lints for rustc integer_to_ptr_transmutes lint
This commit is contained in:
parent
3c664785c1
commit
02a67cc4a5
6 changed files with 32 additions and 67 deletions
|
|
@ -49,17 +49,7 @@ pub(super) fn check<'tcx>(
|
|||
true
|
||||
},
|
||||
(ty::Int(_) | ty::Uint(_), ty::RawPtr(_, _)) => {
|
||||
span_lint_and_then(
|
||||
cx,
|
||||
USELESS_TRANSMUTE,
|
||||
e.span,
|
||||
"transmute from an integer to a pointer",
|
||||
|diag| {
|
||||
if let Some(arg) = sugg::Sugg::hir_opt(cx, arg) {
|
||||
diag.span_suggestion(e.span, "try", arg.as_ty(to_ty.to_string()), Applicability::Unspecified);
|
||||
}
|
||||
},
|
||||
);
|
||||
// Handled by the upstream rustc `integer_to_ptr_transmutes` lint
|
||||
true
|
||||
},
|
||||
_ => false,
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
dead_code,
|
||||
clippy::borrow_as_ptr,
|
||||
unnecessary_transmutes,
|
||||
integer_to_ptr_transmutes,
|
||||
clippy::needless_lifetimes,
|
||||
clippy::missing_transmute_annotations
|
||||
)]
|
||||
|
|
@ -60,12 +61,10 @@ fn useless() {
|
|||
//~^ useless_transmute
|
||||
|
||||
let _: *const usize = std::mem::transmute(5_isize);
|
||||
//~^ useless_transmute
|
||||
|
||||
let _ = std::ptr::dangling::<usize>();
|
||||
|
||||
let _: *const usize = std::mem::transmute(1 + 1usize);
|
||||
//~^ useless_transmute
|
||||
|
||||
let _ = (1 + 1_usize) as *const usize;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: transmute from a reference to a pointer
|
||||
--> tests/ui/transmute.rs:33:27
|
||||
--> tests/ui/transmute.rs:34:27
|
||||
|
|
||||
LL | let _: *const T = core::mem::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T`
|
||||
|
|
@ -8,61 +8,49 @@ LL | let _: *const T = core::mem::transmute(t);
|
|||
= help: to override `-D warnings` add `#[allow(clippy::useless_transmute)]`
|
||||
|
||||
error: transmute from a reference to a pointer
|
||||
--> tests/ui/transmute.rs:36:25
|
||||
--> tests/ui/transmute.rs:37:25
|
||||
|
|
||||
LL | let _: *mut T = core::mem::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T as *mut T`
|
||||
|
||||
error: transmute from a reference to a pointer
|
||||
--> tests/ui/transmute.rs:39:27
|
||||
--> tests/ui/transmute.rs:40:27
|
||||
|
|
||||
LL | let _: *const U = core::mem::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `t as *const T as *const U`
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> tests/ui/transmute.rs:47:27
|
||||
--> tests/ui/transmute.rs:48:27
|
||||
|
|
||||
LL | let _: Vec<i32> = core::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> tests/ui/transmute.rs:50:27
|
||||
--> tests/ui/transmute.rs:51:27
|
||||
|
|
||||
LL | let _: Vec<i32> = core::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> tests/ui/transmute.rs:53:27
|
||||
--> tests/ui/transmute.rs:54:27
|
||||
|
|
||||
LL | let _: Vec<i32> = std::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> tests/ui/transmute.rs:56:27
|
||||
--> tests/ui/transmute.rs:57:27
|
||||
|
|
||||
LL | let _: Vec<i32> = std::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> tests/ui/transmute.rs:59:27
|
||||
--> tests/ui/transmute.rs:60:27
|
||||
|
|
||||
LL | let _: Vec<i32> = my_transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from an integer to a pointer
|
||||
--> tests/ui/transmute.rs:62:31
|
||||
|
|
||||
LL | let _: *const usize = std::mem::transmute(5_isize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `5_isize as *const usize`
|
||||
|
||||
error: transmute from an integer to a pointer
|
||||
--> tests/ui/transmute.rs:67:31
|
||||
|
|
||||
LL | let _: *const usize = std::mem::transmute(1 + 1usize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(1 + 1usize) as *const usize`
|
||||
|
||||
error: transmute from a type (`*const Usize`) to the type that it points to (`Usize`)
|
||||
--> tests/ui/transmute.rs:99:24
|
||||
--> tests/ui/transmute.rs:98:24
|
||||
|
|
||||
LL | let _: Usize = core::mem::transmute(int_const_ptr);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -71,25 +59,25 @@ LL | let _: Usize = core::mem::transmute(int_const_ptr);
|
|||
= help: to override `-D warnings` add `#[allow(clippy::crosspointer_transmute)]`
|
||||
|
||||
error: transmute from a type (`*mut Usize`) to the type that it points to (`Usize`)
|
||||
--> tests/ui/transmute.rs:102:24
|
||||
--> tests/ui/transmute.rs:101:24
|
||||
|
|
||||
LL | let _: Usize = core::mem::transmute(int_mut_ptr);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`Usize`) to a pointer to that type (`*const Usize`)
|
||||
--> tests/ui/transmute.rs:105:31
|
||||
--> tests/ui/transmute.rs:104:31
|
||||
|
|
||||
LL | let _: *const Usize = core::mem::transmute(my_int());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`Usize`) to a pointer to that type (`*mut Usize`)
|
||||
--> tests/ui/transmute.rs:108:29
|
||||
--> tests/ui/transmute.rs:107:29
|
||||
|
|
||||
LL | let _: *mut Usize = core::mem::transmute(my_int());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a `u8` to a `bool`
|
||||
--> tests/ui/transmute.rs:115:28
|
||||
--> tests/ui/transmute.rs:114:28
|
||||
|
|
||||
LL | let _: bool = unsafe { std::mem::transmute(0_u8) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `0_u8 != 0`
|
||||
|
|
@ -98,7 +86,7 @@ LL | let _: bool = unsafe { std::mem::transmute(0_u8) };
|
|||
= help: to override `-D warnings` add `#[allow(clippy::transmute_int_to_bool)]`
|
||||
|
||||
error: transmute from a `&[u8]` to a `&str`
|
||||
--> tests/ui/transmute.rs:122:28
|
||||
--> tests/ui/transmute.rs:121:28
|
||||
|
|
||||
LL | let _: &str = unsafe { std::mem::transmute(B) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::str::from_utf8(B).unwrap()`
|
||||
|
|
@ -107,16 +95,16 @@ LL | let _: &str = unsafe { std::mem::transmute(B) };
|
|||
= help: to override `-D warnings` add `#[allow(clippy::transmute_bytes_to_str)]`
|
||||
|
||||
error: transmute from a `&mut [u8]` to a `&mut str`
|
||||
--> tests/ui/transmute.rs:125:32
|
||||
--> tests/ui/transmute.rs:124:32
|
||||
|
|
||||
LL | let _: &mut str = unsafe { std::mem::transmute(mb) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::str::from_utf8_mut(mb).unwrap()`
|
||||
|
||||
error: transmute from a `&[u8]` to a `&str`
|
||||
--> tests/ui/transmute.rs:128:30
|
||||
--> tests/ui/transmute.rs:127:30
|
||||
|
|
||||
LL | const _: &str = unsafe { std::mem::transmute(B) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::str::from_utf8_unchecked(B)`
|
||||
|
||||
error: aborting due to 18 previous errors
|
||||
error: aborting due to 16 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -13,9 +13,6 @@ fn main() {
|
|||
// We should see an error message for each transmute, and no error messages for
|
||||
// the casts, since the casts are the recommended fixes.
|
||||
|
||||
// e is an integer and U is *U_0, while U_0: Sized; addr-ptr-cast
|
||||
let _ptr_i32_transmute = unsafe { usize::MAX as *const i32 };
|
||||
//~^ useless_transmute
|
||||
let ptr_i32 = usize::MAX as *const i32;
|
||||
|
||||
// e has type *T, U is *U_0, and either U_0: Sized ...
|
||||
|
|
|
|||
|
|
@ -13,9 +13,6 @@ fn main() {
|
|||
// We should see an error message for each transmute, and no error messages for
|
||||
// the casts, since the casts are the recommended fixes.
|
||||
|
||||
// e is an integer and U is *U_0, while U_0: Sized; addr-ptr-cast
|
||||
let _ptr_i32_transmute = unsafe { transmute::<usize, *const i32>(usize::MAX) };
|
||||
//~^ useless_transmute
|
||||
let ptr_i32 = usize::MAX as *const i32;
|
||||
|
||||
// e has type *T, U is *U_0, and either U_0: Sized ...
|
||||
|
|
|
|||
|
|
@ -1,14 +1,5 @@
|
|||
error: transmute from an integer to a pointer
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:17:39
|
||||
|
|
||||
LL | let _ptr_i32_transmute = unsafe { transmute::<usize, *const i32>(usize::MAX) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `usize::MAX as *const i32`
|
||||
|
|
||||
= note: `-D clippy::useless-transmute` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::useless_transmute)]`
|
||||
|
||||
error: transmute from a pointer to a pointer
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:22:38
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:19:38
|
||||
|
|
||||
LL | let _ptr_i8_transmute = unsafe { transmute::<*const i32, *const i8>(ptr_i32) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -22,7 +13,7 @@ LL + let _ptr_i8_transmute = unsafe { ptr_i32.cast::<i8>() };
|
|||
|
|
||||
|
||||
error: transmute from a pointer to a pointer
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:29:46
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:26:46
|
||||
|
|
||||
LL | let _ptr_to_unsized_transmute = unsafe { transmute::<*const [i32], *const [u32]>(slice_ptr) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -34,7 +25,7 @@ LL + let _ptr_to_unsized_transmute = unsafe { slice_ptr as *const [u32] };
|
|||
|
|
||||
|
||||
error: transmute from `*const i32` to `usize` which could be expressed as a pointer cast instead
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:36:50
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:33:50
|
||||
|
|
||||
LL | let _usize_from_int_ptr_transmute = unsafe { transmute::<*const i32, usize>(ptr_i32) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `ptr_i32 as usize`
|
||||
|
|
@ -43,40 +34,43 @@ LL | let _usize_from_int_ptr_transmute = unsafe { transmute::<*const i32, us
|
|||
= help: to override `-D warnings` add `#[allow(clippy::transmutes_expressible_as_ptr_casts)]`
|
||||
|
||||
error: transmute from a reference to a pointer
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:43:41
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:40:41
|
||||
|
|
||||
LL | let _array_ptr_transmute = unsafe { transmute::<&[i32; 4], *const [i32; 4]>(array_ref) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `array_ref as *const [i32; 4]`
|
||||
|
|
||||
= note: `-D clippy::useless-transmute` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::useless_transmute)]`
|
||||
|
||||
error: transmute from `fn(usize) -> u8` to `*const usize` which could be expressed as a pointer cast instead
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:52:41
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:49:41
|
||||
|
|
||||
LL | let _usize_ptr_transmute = unsafe { transmute::<fn(usize) -> u8, *const usize>(foo) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `foo as *const usize`
|
||||
|
||||
error: transmute from `fn(usize) -> u8` to `usize` which could be expressed as a pointer cast instead
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:57:49
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:54:49
|
||||
|
|
||||
LL | let _usize_from_fn_ptr_transmute = unsafe { transmute::<fn(usize) -> u8, usize>(foo) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `foo as usize`
|
||||
|
||||
error: transmute from `*const u32` to `usize` which could be expressed as a pointer cast instead
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:61:36
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:58:36
|
||||
|
|
||||
LL | let _usize_from_ref = unsafe { transmute::<*const u32, usize>(&1u32) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&1u32 as *const u32 as usize`
|
||||
|
||||
error: transmute from a reference to a pointer
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:73:14
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:70:14
|
||||
|
|
||||
LL | unsafe { transmute::<&[i32; 1], *const u8>(in_param) }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `in_param as *const [i32; 1] as *const u8`
|
||||
|
||||
error: transmute from `fn()` to `*const u8` which could be expressed as a pointer cast instead
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:92:28
|
||||
--> tests/ui/transmutes_expressible_as_ptr_casts.rs:89:28
|
||||
|
|
||||
LL | let _x: u8 = unsafe { *std::mem::transmute::<fn(), *const u8>(f) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(f as *const u8)`
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue