diff options
| author | Ryan1729 <Ryan1729@gmail.com> | 2020-08-09 00:15:56 -0600 |
|---|---|---|
| committer | Ryan1729 <Ryan1729@gmail.com> | 2020-08-09 00:15:56 -0600 |
| commit | 84db238fa16891196ed8378f328479867cf1ea39 (patch) | |
| tree | a57c8b3bb6f48c706bdd1fd043459b37ec24cbcb | |
| parent | a1ca12581a5099122a64e64b1dd76cd56de5ef29 (diff) | |
| download | rust-84db238fa16891196ed8378f328479867cf1ea39.tar.gz rust-84db238fa16891196ed8378f328479867cf1ea39.zip | |
add a test example of where transmutes_expressible_as_ptr_casts should not suggest anything
| -rw-r--r-- | tests/ui/transmutes_expressible_as_ptr_casts.fixed | 14 | ||||
| -rw-r--r-- | tests/ui/transmutes_expressible_as_ptr_casts.rs | 14 |
2 files changed, 26 insertions, 2 deletions
diff --git a/tests/ui/transmutes_expressible_as_ptr_casts.fixed b/tests/ui/transmutes_expressible_as_ptr_casts.fixed index ab181687e1e..d80c9f62ed0 100644 --- a/tests/ui/transmutes_expressible_as_ptr_casts.fixed +++ b/tests/ui/transmutes_expressible_as_ptr_casts.fixed @@ -5,7 +5,7 @@ #![warn(clippy::useless_transmute)] #![warn(clippy::transmute_ptr_to_ptr)] -use std::mem::transmute; +use std::mem::{size_of, transmute}; // rustc_typeck::check::cast contains documentation about when a cast `e as U` is // valid, which we quote from below. @@ -75,3 +75,15 @@ fn main() { fn trigger_do_check_to_emit_error(in_param: &[i32; 1]) -> *const u8 { unsafe { in_param as *const [i32; 1] as *const u8 } } + +#[repr(C)] +struct Single(u64); + +#[repr(C)] +struct Pair(u32, u32); + +fn cannot_be_expressed_as_pointer_cast(in_param: Single) -> Pair { + assert_eq!(size_of::<Single>(), size_of::<Pair>()); + + unsafe { transmute::<Single, Pair>(in_param) } +} diff --git a/tests/ui/transmutes_expressible_as_ptr_casts.rs b/tests/ui/transmutes_expressible_as_ptr_casts.rs index 2693094ba6c..4f27a3a88ba 100644 --- a/tests/ui/transmutes_expressible_as_ptr_casts.rs +++ b/tests/ui/transmutes_expressible_as_ptr_casts.rs @@ -5,7 +5,7 @@ #![warn(clippy::useless_transmute)] #![warn(clippy::transmute_ptr_to_ptr)] -use std::mem::transmute; +use std::mem::{size_of, transmute}; // rustc_typeck::check::cast contains documentation about when a cast `e as U` is // valid, which we quote from below. @@ -75,3 +75,15 @@ fn main() { fn trigger_do_check_to_emit_error(in_param: &[i32; 1]) -> *const u8 { unsafe { transmute::<&[i32; 1], *const u8>(in_param) } } + +#[repr(C)] +struct Single(u64); + +#[repr(C)] +struct Pair(u32, u32); + +fn cannot_be_expressed_as_pointer_cast(in_param: Single) -> Pair { + assert_eq!(size_of::<Single>(), size_of::<Pair>()); + + unsafe { transmute::<Single, Pair>(in_param) } +} |
