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