| //@aux-build:macro_rules.rs | |
| #![warn(clippy::missing_transmute_annotations)] | |
| #![expect(clippy::let_with_type_underscore)] | |
| #[macro_use] | |
| extern crate macro_rules; | |
| macro_rules! local_bad_transmute { | |
| ($e:expr) => { | |
| std::mem::transmute($e) | |
| //~^ missing_transmute_annotations | |
| }; | |
| } | |
| fn bar(x: i32) -> i32 { | |
| x | |
| } | |
| unsafe fn foo1() -> i32 { | |
| unsafe { | |
| // Should not warn! | |
| std::mem::transmute([1u16, 2u16]) | |
| } | |
| } | |
| // Should not warn! | |
| const _: i32 = unsafe { std::mem::transmute([1u16, 2u16]) }; | |
| #[repr(i32)] | |
| enum Foo { | |
| A = 0, | |
| } | |
| unsafe fn foo2() -> i32 { | |
| unsafe { | |
| let mut i: i32 = 0; | |
| i = std::mem::transmute([1u16, 2u16]); | |
| //~^ missing_transmute_annotations | |
| i = std::mem::transmute::<_, _>([1u16, 2u16]); | |
| //~^ missing_transmute_annotations | |
| i = std::mem::transmute::<_, i32>([1u16, 2u16]); | |
| //~^ missing_transmute_annotations | |
| i = std::mem::transmute::<[u16; 2], _>([1u16, 2u16]); | |
| //~^ missing_transmute_annotations | |
| let x: i32 = bar(std::mem::transmute::<[u16; 2], _>([1u16, 2u16])); | |
| //~^ missing_transmute_annotations | |
| bar(std::mem::transmute::<[u16; 2], _>([1u16, 2u16])); | |
| //~^ missing_transmute_annotations | |
| i = local_bad_transmute!([1u16, 2u16]); | |
| // Should not warn. | |
| i = bad_transmute!([1u16, 2u16]); | |
| i = std::mem::transmute([0i16, 0i16]); | |
| //~^ missing_transmute_annotations | |
| i = std::mem::transmute(Foo::A); | |
| //~^ missing_transmute_annotations | |
| i | |
| } | |
| } | |
| #[expect(invalid_value)] | |
| // https://github.com/rust-lang/rust-clippy/issues/15839 | |
| fn function_name_in_suggestion() { | |
| trait T {} | |
| struct S(*mut dyn T); | |
| let _ = S(unsafe { std::mem::transmute((0usize, 0usize)) }); | |
| //~^ missing_transmute_annotations | |
| } | |
| fn main() { | |
| let x: _ = unsafe { std::mem::transmute::<_, i32>([1u16, 2u16]) }; | |
| //~^ missing_transmute_annotations | |
| unsafe { | |
| let x: _ = std::mem::transmute::<_, i32>([1u16, 2u16]); | |
| //~^ missing_transmute_annotations | |
| // Should not warn. | |
| std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]); | |
| let x = std::mem::transmute::<[u16; 2], i32>([1u16, 2u16]); | |
| let x: i32 = std::mem::transmute::<[u16; 2], _>([1u16, 2u16]); | |
| let x: i32 = std::mem::transmute::<_, i32>([1u16, 2u16]); | |
| let x: i32 = std::mem::transmute([1u16, 2u16]); | |
| } | |
| let x: i32 = unsafe { std::mem::transmute([1u16, 2u16]) }; | |
| } |