Skip to content

Commit 9cabd63

Browse files
committed
also lint single expression blocks
1 parent afcce38 commit 9cabd63

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

clippy_lints/src/mixed_read_write_in_expression.rs

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

tests/ui/diverging_sub_expression.rs

Lines changed: 9 additions & 0 deletions
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
}

tests/ui/diverging_sub_expression.stderr

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,34 @@ LL | 16 => false || { return; },
5151
| ^^^^^^
5252

5353
error: sub-expression diverges
54-
--> $DIR/diverging_sub_expression.rs:43:26
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
5579
|
5680
LL | _ => true || break,
5781
| ^^^^^
5882

59-
error: aborting due to 9 previous errors
83+
error: aborting due to 13 previous errors
6084

0 commit comments

Comments
 (0)