| #![deny(clippy::branches_sharing_code, clippy::if_same_then_else)] |
| #![allow(dead_code)] |
| //@no-rustfix |
| // branches_sharing_code at the top and bottom of the if blocks |
| |
| struct DataPack { |
| id: u32, |
| name: String, |
| some_data: Vec<u8>, |
| } |
| |
| fn overlapping_eq_regions() { |
| let x = 9; |
| |
| // Overlap with separator |
| if x == 7 { |
| //~^ branches_sharing_code |
| |
| let t = 7; |
| let _overlap_start = t * 2; |
| let _overlap_end = 2 * t; |
| let _u = 9; |
| } else { |
| let t = 7; |
| let _overlap_start = t * 2; |
| let _overlap_end = 2 * t; |
| println!("Overlap separator"); |
| let _overlap_start = t * 2; |
| let _overlap_end = 2 * t; |
| let _u = 9; |
| } |
| |
| // Overlap with separator |
| if x == 99 { |
| //~^ branches_sharing_code |
| |
| let r = 7; |
| let _overlap_start = r; |
| let _overlap_middle = r * r; |
| let _overlap_end = r * r * r; |
| let z = "end"; |
| } else { |
| let r = 7; |
| let _overlap_start = r; |
| let _overlap_middle = r * r; |
| let _overlap_middle = r * r; |
| let _overlap_end = r * r * r; |
| let z = "end"; |
| } |
| } |
| |
| fn complexer_example() { |
| fn gen_id(x: u32, y: u32) -> u32 { |
| let x = x & 0x0000_ffff; |
| let y = (y & 0xffff_0000) << 16; |
| x | y |
| } |
| |
| fn process_data(data: DataPack) { |
| let _ = data; |
| } |
| |
| let x = 8; |
| let y = 9; |
| if (x > 7 && y < 13) || (x + y) % 2 == 1 { |
| //~^ branches_sharing_code |
| |
| let a = 0xcafe; |
| let b = 0xffff00ff; |
| let e_id = gen_id(a, b); |
| |
| println!("From the a `{a}` to the b `{b}`"); |
| |
| let pack = DataPack { |
| id: e_id, |
| name: "Player 1".to_string(), |
| some_data: vec![0x12, 0x34, 0x56, 0x78, 0x90], |
| }; |
| process_data(pack); |
| } else { |
| let a = 0xcafe; |
| let b = 0xffff00ff; |
| let e_id = gen_id(a, b); |
| |
| println!("The new ID is '{e_id}'"); |
| |
| let pack = DataPack { |
| id: e_id, |
| name: "Player 1".to_string(), |
| some_data: vec![0x12, 0x34, 0x56, 0x78, 0x90], |
| }; |
| process_data(pack); |
| } |
| } |
| |
| /// This should add a note to the lint msg since the moved expression is not `()` |
| fn added_note_for_expression_use() -> u32 { |
| let x = 9; |
| |
| let _ = if x == 7 { |
| //~^ branches_sharing_code |
| |
| let _ = 19; |
| |
| let _splitter = 6; |
| |
| x << 2 |
| } else { |
| let _ = 19; |
| |
| x << 2 |
| }; |
| |
| if x == 9 { |
| //~^ branches_sharing_code |
| |
| let _ = 17; |
| |
| let _splitter = 6; |
| |
| x * 4 |
| } else { |
| let _ = 17; |
| |
| x * 4 |
| } |
| } |
| |
| fn main() {} |
| |
| mod issue14873 { |
| fn foo() -> i32 { |
| todo!() |
| } |
| |
| macro_rules! qux { |
| ($a:ident, $b:ident, $condition:expr) => { |
| let mut $a: i32 = foo(); |
| let mut $b: i32 = foo(); |
| if $condition { |
| "." |
| } else { |
| "" |
| }; |
| $a = foo(); |
| $b = foo(); |
| }; |
| } |
| |
| fn share_on_top_and_bottom() { |
| if false { |
| qux!(a, b, a == b); |
| } else { |
| qux!(a, b, a != b); |
| }; |
| |
| if false { |
| //~^ branches_sharing_code |
| let x = 1; |
| qux!(a, b, a == b); |
| let y = 1; |
| } else { |
| let x = 1; |
| qux!(a, b, a != b); |
| let y = 1; |
| } |
| } |
| } |