Prefer verbose suggestions for integer_to_ptr_transmutes lint
This commit is contained in:
parent
02a67cc4a5
commit
1da4959e54
2 changed files with 76 additions and 38 deletions
|
|
@ -1561,7 +1561,8 @@ pub(crate) struct IntegerToPtrTransmutes<'tcx> {
|
|||
pub(crate) enum IntegerToPtrTransmutesSuggestion<'tcx> {
|
||||
#[multipart_suggestion(
|
||||
lint_suggestion_with_exposed_provenance,
|
||||
applicability = "machine-applicable"
|
||||
applicability = "machine-applicable",
|
||||
style = "verbose"
|
||||
)]
|
||||
ToPtr {
|
||||
dst: Ty<'tcx>,
|
||||
|
|
@ -1571,7 +1572,8 @@ pub(crate) enum IntegerToPtrTransmutesSuggestion<'tcx> {
|
|||
},
|
||||
#[multipart_suggestion(
|
||||
lint_suggestion_with_exposed_provenance,
|
||||
applicability = "machine-applicable"
|
||||
applicability = "machine-applicable",
|
||||
style = "verbose"
|
||||
)]
|
||||
ToRef {
|
||||
dst: Ty<'tcx>,
|
||||
|
|
|
|||
|
|
@ -2,9 +2,7 @@ warning: transmuting an integer to a pointer creates a pointer without provenanc
|
|||
--> $DIR/int_to_ptr.rs:10:36
|
||||
|
|
||||
LL | let _ptr: *const u8 = unsafe { std::mem::transmute::<usize, *const u8>(a) };
|
||||
| ----------------------------------------^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance: `std::ptr::with_exposed_provenance::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
|
|
@ -12,160 +10,198 @@ LL | let _ptr: *const u8 = unsafe { std::mem::transmute::<usize, *const u8>(
|
|||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
= note: `#[warn(integer_to_ptr_transmutes)]` on by default
|
||||
help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ptr: *const u8 = unsafe { std::mem::transmute::<usize, *const u8>(a) };
|
||||
LL + let _ptr: *const u8 = unsafe { std::ptr::with_exposed_provenance::<u8>(a) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:12:34
|
||||
|
|
||||
LL | let _ptr: *mut u8 = unsafe { std::mem::transmute::<usize, *mut u8>(a) };
|
||||
| --------------------------------------^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance: `std::ptr::with_exposed_provenance_mut::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ptr: *mut u8 = unsafe { std::mem::transmute::<usize, *mut u8>(a) };
|
||||
LL + let _ptr: *mut u8 = unsafe { std::ptr::with_exposed_provenance_mut::<u8>(a) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:14:38
|
||||
|
|
||||
LL | let _ref: &'static u8 = unsafe { std::mem::transmute::<usize, &'static u8>(a) };
|
||||
| ------------------------------------------^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance: `&*std::ptr::with_exposed_provenance::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ref: &'static u8 = unsafe { std::mem::transmute::<usize, &'static u8>(a) };
|
||||
LL + let _ref: &'static u8 = unsafe { &*std::ptr::with_exposed_provenance::<u8>(a) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:16:42
|
||||
|
|
||||
LL | let _ref: &'static mut u8 = unsafe { std::mem::transmute::<usize, &'static mut u8>(a) };
|
||||
| ----------------------------------------------^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance: `&mut *std::ptr::with_exposed_provenance_mut::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ref: &'static mut u8 = unsafe { std::mem::transmute::<usize, &'static mut u8>(a) };
|
||||
LL + let _ref: &'static mut u8 = unsafe { &mut *std::ptr::with_exposed_provenance_mut::<u8>(a) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:19:25
|
||||
|
|
||||
LL | let _ptr = unsafe { std::mem::transmute::<usize, *const u8>(42usize) };
|
||||
| ----------------------------------------^^^^^^^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance: `std::ptr::with_exposed_provenance::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ptr = unsafe { std::mem::transmute::<usize, *const u8>(42usize) };
|
||||
LL + let _ptr = unsafe { std::ptr::with_exposed_provenance::<u8>(42usize) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:21:25
|
||||
|
|
||||
LL | let _ptr = unsafe { std::mem::transmute::<usize, *const u8>(a + a) };
|
||||
| ----------------------------------------^^^^^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance: `std::ptr::with_exposed_provenance::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ptr = unsafe { std::mem::transmute::<usize, *const u8>(a + a) };
|
||||
LL + let _ptr = unsafe { std::ptr::with_exposed_provenance::<u8>(a + a) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:26:36
|
||||
|
|
||||
LL | let _ptr: *const u8 = unsafe { std::mem::transmute::<usize, *const u8>(a) };
|
||||
| ----------------------------------------^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance: `std::ptr::with_exposed_provenance::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ptr: *const u8 = unsafe { std::mem::transmute::<usize, *const u8>(a) };
|
||||
LL + let _ptr: *const u8 = unsafe { std::ptr::with_exposed_provenance::<u8>(a) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:28:34
|
||||
|
|
||||
LL | let _ptr: *mut u8 = unsafe { std::mem::transmute::<usize, *mut u8>(a) };
|
||||
| --------------------------------------^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance: `std::ptr::with_exposed_provenance_mut::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ptr: *mut u8 = unsafe { std::mem::transmute::<usize, *mut u8>(a) };
|
||||
LL + let _ptr: *mut u8 = unsafe { std::ptr::with_exposed_provenance_mut::<u8>(a) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:30:38
|
||||
|
|
||||
LL | let _ref: &'static u8 = unsafe { std::mem::transmute::<usize, &'static u8>(a) };
|
||||
| ------------------------------------------^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance: `&*std::ptr::with_exposed_provenance::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ref: &'static u8 = unsafe { std::mem::transmute::<usize, &'static u8>(a) };
|
||||
LL + let _ref: &'static u8 = unsafe { &*std::ptr::with_exposed_provenance::<u8>(a) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:32:42
|
||||
|
|
||||
LL | let _ref: &'static mut u8 = unsafe { std::mem::transmute::<usize, &'static mut u8>(a) };
|
||||
| ----------------------------------------------^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance: `&mut *std::ptr::with_exposed_provenance_mut::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance_mut` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ref: &'static mut u8 = unsafe { std::mem::transmute::<usize, &'static mut u8>(a) };
|
||||
LL + let _ref: &'static mut u8 = unsafe { &mut *std::ptr::with_exposed_provenance_mut::<u8>(a) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:35:25
|
||||
|
|
||||
LL | let _ptr = unsafe { std::mem::transmute::<usize, *const u8>(42usize) };
|
||||
| ----------------------------------------^^^^^^^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance: `std::ptr::with_exposed_provenance::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ptr = unsafe { std::mem::transmute::<usize, *const u8>(42usize) };
|
||||
LL + let _ptr = unsafe { std::ptr::with_exposed_provenance::<u8>(42usize) };
|
||||
|
|
||||
|
||||
warning: transmuting an integer to a pointer creates a pointer without provenance
|
||||
--> $DIR/int_to_ptr.rs:37:25
|
||||
|
|
||||
LL | let _ptr = unsafe { std::mem::transmute::<usize, *const u8>(a + a) };
|
||||
| ----------------------------------------^^^^^^
|
||||
| |
|
||||
| help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance: `std::ptr::with_exposed_provenance::<u8>(`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this is dangerous because dereferencing the resulting pointer is undefined behavior
|
||||
= note: exposed provenance semantics can be used to create a pointer based on some previously exposed provenance
|
||||
= help: if you truly mean to create a pointer without provenance, use `std::ptr::without_provenance_mut`
|
||||
= help: for more information about transmute, see <https://doc.rust-lang.org/std/mem/fn.transmute.html#transmutation-between-pointers-and-integers>
|
||||
= help: for more information about exposed provenance, see <https://doc.rust-lang.org/std/ptr/index.html#exposed-provenance>
|
||||
help: use `std::ptr::with_exposed_provenance` instead to use a previously exposed provenance
|
||||
|
|
||||
LL - let _ptr = unsafe { std::mem::transmute::<usize, *const u8>(a + a) };
|
||||
LL + let _ptr = unsafe { std::ptr::with_exposed_provenance::<u8>(a + a) };
|
||||
|
|
||||
|
||||
warning: 12 warnings emitted
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue