blob: 2c408f2be3754dde165530484bc8b6b15647e4f9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#![warn(clippy::manual_abs_diff)]
use std::time::Duration;
fn main() {
let a: usize = 5;
let b: usize = 3;
let c: usize = 8;
let d: usize = 11;
let _ = if a > b { a - b } else { b - a };
//~^ manual_abs_diff
let _ = if a < b { b - a } else { a - b };
//~^ manual_abs_diff
let _ = if 5 > b { 5 - b } else { b - 5 };
//~^ manual_abs_diff
let _ = if b > 5 { b - 5 } else { 5 - b };
//~^ manual_abs_diff
let _ = if a >= b { a - b } else { b - a };
//~^ manual_abs_diff
let _ = if a <= b { b - a } else { a - b };
//~^ manual_abs_diff
#[allow(arithmetic_overflow)]
{
let _ = if a > b { b - a } else { a - b };
let _ = if a < b { a - b } else { b - a };
}
let _ = if (a + b) > (c + d) {
//~^ manual_abs_diff
(a + b) - (c + d)
} else {
(c + d) - (a + b)
};
let _ = if (a + b) < (c + d) {
//~^ manual_abs_diff
(c + d) - (a + b)
} else {
(a + b) - (c + d)
};
const A: usize = 5;
const B: usize = 3;
// check const context
const _: usize = if A > B { A - B } else { B - A };
//~^ manual_abs_diff
let a = Duration::from_secs(3);
let b = Duration::from_secs(5);
let _ = if a > b { a - b } else { b - a };
//~^ manual_abs_diff
let a: i32 = 3;
let b: i32 = -5;
let _ = if a > b { a - b } else { b - a };
let _ = if a > b { (a - b) as u32 } else { (b - a) as u32 };
//~^ manual_abs_diff
}
// FIXME: bunch of patterns that should be linted
fn fixme() {
let a: usize = 5;
let b: usize = 3;
let c: usize = 8;
let d: usize = 11;
{
let out;
if a > b {
out = a - b;
} else {
out = b - a;
}
}
{
let mut out = 0;
if a > b {
out = a - b;
} else if a < b {
out = b - a;
}
}
#[allow(clippy::implicit_saturating_sub)]
let _ = if a > b {
a - b
} else if a < b {
b - a
} else {
0
};
let a: i32 = 3;
let b: i32 = 5;
let _: u32 = if a > b { a - b } else { b - a } as u32;
}
fn non_primitive_ty() {
#[derive(Eq, PartialEq, PartialOrd)]
struct S(i32);
impl std::ops::Sub for S {
type Output = S;
fn sub(self, rhs: Self) -> Self::Output {
Self(self.0 - rhs.0)
}
}
let (a, b) = (S(10), S(20));
let _ = if a < b { b - a } else { a - b };
}
fn issue15254(a: &usize, b: &usize) -> usize {
if a < b {
//~^ manual_abs_diff
b - a
} else {
a - b
}
}
|