Skip to content

Commit 5514f32

Browse files
committed
1 parent c490974 commit 5514f32

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

clippy_lints/src/mixed_read_write_in_expression.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use clippy_utils::diagnostics::{span_lint, span_lint_and_note};
22
use clippy_utils::{get_parent_expr, path_to_local, path_to_local_id};
33
use if_chain::if_chain;
4-
use rustc_hir::intravisit::{walk_expr, Visitor};
4+
use rustc_hir::intravisit::{walk_block, walk_expr, Visitor};
55
use rustc_hir::{BinOpKind, Block, Expr, ExprKind, Guard, HirId, Local, Node, Stmt, StmtKind};
66
use rustc_lint::{LateContext, LateLintPass};
77
use rustc_middle::ty;
@@ -155,6 +155,7 @@ impl<'a, 'tcx> Visitor<'tcx> for DivergenceVisitor<'a, 'tcx> {
155155
self.report_diverging_sub_expr(e);
156156
}
157157
},
158+
ExprKind::Block(block, ..) => walk_block(self, block),
158159
_ => {
159160
// do not lint expressions referencing objects of type `!`, as that required a
160161
// diverging expression
@@ -163,9 +164,6 @@ impl<'a, 'tcx> Visitor<'tcx> for DivergenceVisitor<'a, 'tcx> {
163164
}
164165
self.maybe_walk_expr(e);
165166
}
166-
fn visit_block(&mut self, _: &'tcx Block<'_>) {
167-
// don't continue over blocks, LateLintPass already does that
168-
}
169167
}
170168

171169
/// Walks up the AST from the given write expression (`vis.write_expr`) looking

tests/ui/diverging_sub_expression.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#![warn(clippy::diverging_sub_expression)]
22
#![allow(clippy::match_same_arms, clippy::overly_complex_bool_expr)]
3+
#![allow(clippy::nonminimal_bool)]
34
#[allow(clippy::empty_loop)]
45
fn diverge() -> ! {
56
loop {}
@@ -35,6 +36,9 @@ fn foobar() {
3536
99 => return,
3637
_ => true || panic!("boo"),
3738
},
39+
// lint blocks as well
40+
15 => true || { return; },
41+
16 => false || { return; },
3842
_ => true || break,
3943
};
4044
}
Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,60 @@
11
error: sub-expression diverges
2-
--> $DIR/diverging_sub_expression.rs:19:10
2+
--> $DIR/diverging_sub_expression.rs:20:10
33
|
44
LL | b || diverge();
55
| ^^^^^^^^^
66
|
77
= note: `-D clippy::diverging-sub-expression` implied by `-D warnings`
88

99
error: sub-expression diverges
10-
--> $DIR/diverging_sub_expression.rs:20:10
10+
--> $DIR/diverging_sub_expression.rs:21:10
1111
|
1212
LL | b || A.foo();
1313
| ^^^^^^^
1414

1515
error: sub-expression diverges
16-
--> $DIR/diverging_sub_expression.rs:29:26
16+
--> $DIR/diverging_sub_expression.rs:30:26
1717
|
1818
LL | 6 => true || return,
1919
| ^^^^^^
2020

2121
error: sub-expression diverges
22-
--> $DIR/diverging_sub_expression.rs:30:26
22+
--> $DIR/diverging_sub_expression.rs:31:26
2323
|
2424
LL | 7 => true || continue,
2525
| ^^^^^^^^
2626

2727
error: sub-expression diverges
28-
--> $DIR/diverging_sub_expression.rs:33:26
28+
--> $DIR/diverging_sub_expression.rs:34:26
2929
|
3030
LL | 3 => true || diverge(),
3131
| ^^^^^^^^^
3232

3333
error: sub-expression diverges
34-
--> $DIR/diverging_sub_expression.rs:36:30
34+
--> $DIR/diverging_sub_expression.rs:37:30
3535
|
3636
LL | _ => true || panic!("boo"),
3737
| ^^^^^^^^^^^^^
3838
|
3939
= 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)
4040

4141
error: sub-expression diverges
42-
--> $DIR/diverging_sub_expression.rs:38:26
42+
--> $DIR/diverging_sub_expression.rs:39:29
43+
|
44+
LL | 15 => true || { return; },
45+
| ^^^^^^
46+
47+
error: sub-expression diverges
48+
--> $DIR/diverging_sub_expression.rs:40:30
49+
|
50+
LL | 16 => false || { return; },
51+
| ^^^^^^
52+
53+
error: sub-expression diverges
54+
--> $DIR/diverging_sub_expression.rs:41:26
4355
|
4456
LL | _ => true || break,
4557
| ^^^^^
4658

47-
error: aborting due to 7 previous errors
59+
error: aborting due to 9 previous errors
4860

0 commit comments

Comments
 (0)