1 #![warn(clippy::if_same_then_else)]
2 #![allow(
3     clippy::blacklisted_name,
4     clippy::eq_op,
5     clippy::never_loop,
6     clippy::no_effect,
7     clippy::unused_unit,
8     clippy::zero_divided_by_zero,
9     clippy::branches_sharing_code
10 )]
11 
12 struct Foo {
13     bar: u8,
14 }
15 
foo() -> bool16 fn foo() -> bool {
17     unimplemented!()
18 }
19 
if_same_then_else()20 fn if_same_then_else() {
21     if true {
22         Foo { bar: 42 };
23         0..10;
24         ..;
25         0..;
26         ..10;
27         0..=10;
28         foo();
29     } else {
30         //~ ERROR same body as `if` block
31         Foo { bar: 42 };
32         0..10;
33         ..;
34         0..;
35         ..10;
36         0..=10;
37         foo();
38     }
39 
40     if true {
41         Foo { bar: 42 };
42     } else {
43         Foo { bar: 43 };
44     }
45 
46     if true {
47         ();
48     } else {
49         ()
50     }
51 
52     if true {
53         0..10;
54     } else {
55         0..=10;
56     }
57 
58     if true {
59         foo();
60         foo();
61     } else {
62         foo();
63     }
64 
65     let _ = if true {
66         0.0
67     } else {
68         //~ ERROR same body as `if` block
69         0.0
70     };
71 
72     let _ = if true {
73         -0.0
74     } else {
75         //~ ERROR same body as `if` block
76         -0.0
77     };
78 
79     let _ = if true { 0.0 } else { -0.0 };
80 
81     // Different NaNs
82     let _ = if true { 0.0 / 0.0 } else { f32::NAN };
83 
84     if true {
85         foo();
86     }
87 
88     let _ = if true {
89         42
90     } else {
91         //~ ERROR same body as `if` block
92         42
93     };
94 
95     if true {
96         let bar = if true { 42 } else { 43 };
97 
98         while foo() {
99             break;
100         }
101         bar + 1;
102     } else {
103         //~ ERROR same body as `if` block
104         let bar = if true { 42 } else { 43 };
105 
106         while foo() {
107             break;
108         }
109         bar + 1;
110     }
111 
112     if true {
113         let _ = match 42 {
114             42 => 1,
115             a if a > 0 => 2,
116             10..=15 => 3,
117             _ => 4,
118         };
119     } else if false {
120         foo();
121     } else if foo() {
122         let _ = match 42 {
123             42 => 1,
124             a if a > 0 => 2,
125             10..=15 => 3,
126             _ => 4,
127         };
128     }
129 }
130 
131 // Issue #2423. This was causing an ICE.
func()132 fn func() {
133     if true {
134         f(&[0; 62]);
135         f(&[0; 4]);
136         f(&[0; 3]);
137     } else {
138         f(&[0; 62]);
139         f(&[0; 6]);
140         f(&[0; 6]);
141     }
142 }
143 
f(val: &[u8])144 fn f(val: &[u8]) {}
145 
146 mod issue_5698 {
mul_not_always_commutative(x: i32, y: i32) -> i32147     fn mul_not_always_commutative(x: i32, y: i32) -> i32 {
148         if x == 42 {
149             x * y
150         } else if x == 21 {
151             y * x
152         } else {
153             0
154         }
155     }
156 }
157 
main()158 fn main() {}
159