Skip to content

Commit 0c545c7

Browse files
committed
also lint single expression blocks
Update mixed_read_write_in_expression.rs Update diverging_sub_expression.stderr
1 parent 5825b9e commit 0c545c7

File tree

3 files changed

+100
-1
lines changed

3 files changed

+100
-1
lines changed

clippy_lints/src/mixed_read_write_in_expression.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,13 @@ impl<'a, 'tcx> Visitor<'tcx> for DivergenceVisitor<'a, 'tcx> {
139139
match e.kind {
140140
// fix #10776
141141
ExprKind::Block(block, ..) => {
142-
if let Some(stmt) = block.stmts.first() && block.stmts.len() == 1 {
142+
if let Some(e) = block.expr {
143+
self.visit_expr(e);
144+
145+
return;
146+
}
147+
148+
if let [stmt] = block.stmts && block.stmts.len() == 1 {
143149
match stmt.kind {
144150
StmtKind::Expr(e) | StmtKind::Semi(e) => self.visit_expr(e),
145151
_ => {},

tests/ui/diverging_sub_expression.rs

+9
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@ fn foobar() {
4040
// lint blocks as well
4141
15 => true || { return; },
4242
16 => false || { return; },
43+
// ... and when it's a single expression
44+
17 => true || { return },
45+
18 => false || { return },
46+
// ... but not when there's both an expression and a statement
47+
19 => true || { _ = 1; return },
48+
20 => false || { _ = 1; return },
49+
// ... or multiple statements
50+
21 => true || { _ = 1; return; },
51+
22 => false || { _ = 1; return; },
4352
_ => true || break,
4453
};
4554
}
+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
error: sub-expression diverges
2+
--> $DIR/diverging_sub_expression.rs:20:10
3+
|
4+
LL | b || diverge();
5+
| ^^^^^^^^^
6+
|
7+
= note: `-D clippy::diverging-sub-expression` implied by `-D warnings`
8+
9+
error: sub-expression diverges
10+
--> $DIR/diverging_sub_expression.rs:21:10
11+
|
12+
LL | b || A.foo();
13+
| ^^^^^^^
14+
15+
error: sub-expression diverges
16+
--> $DIR/diverging_sub_expression.rs:31:26
17+
|
18+
LL | 6 => true || return,
19+
| ^^^^^^
20+
21+
error: sub-expression diverges
22+
--> $DIR/diverging_sub_expression.rs:32:26
23+
|
24+
LL | 7 => true || continue,
25+
| ^^^^^^^^
26+
27+
error: sub-expression diverges
28+
--> $DIR/diverging_sub_expression.rs:35:26
29+
|
30+
LL | 3 => true || diverge(),
31+
| ^^^^^^^^^
32+
33+
error: sub-expression diverges
34+
--> $DIR/diverging_sub_expression.rs:38:30
35+
|
36+
LL | _ => true || panic!("boo"),
37+
| ^^^^^^^^^^^^^
38+
|
39+
= note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
40+
41+
error: sub-expression diverges
42+
--> $DIR/diverging_sub_expression.rs:41:29
43+
|
44+
LL | 15 => true || { return; },
45+
| ^^^^^^
46+
47+
error: sub-expression diverges
48+
--> $DIR/diverging_sub_expression.rs:42:30
49+
|
50+
LL | 16 => false || { return; },
51+
| ^^^^^^
52+
53+
error: sub-expression diverges
54+
--> $DIR/diverging_sub_expression.rs:44:29
55+
|
56+
LL | 17 => true || { return },
57+
| ^^^^^^
58+
59+
error: sub-expression diverges
60+
--> $DIR/diverging_sub_expression.rs:45:30
61+
|
62+
LL | 18 => false || { return },
63+
| ^^^^^^
64+
65+
error: sub-expression diverges
66+
--> $DIR/diverging_sub_expression.rs:47:36
67+
|
68+
LL | 19 => true || { _ = 1; return },
69+
| ^^^^^^
70+
71+
error: sub-expression diverges
72+
--> $DIR/diverging_sub_expression.rs:48:37
73+
|
74+
LL | 20 => false || { _ = 1; return },
75+
| ^^^^^^
76+
77+
error: sub-expression diverges
78+
--> $DIR/diverging_sub_expression.rs:52:26
79+
|
80+
LL | _ => true || break,
81+
| ^^^^^
82+
83+
error: aborting due to 13 previous errors
84+

0 commit comments

Comments
 (0)