also lint single expression blocks
Update mixed_read_write_in_expression.rs Update diverging_sub_expression.stderr
This commit is contained in:
parent
5825b9e3e2
commit
0c545c7bcc
@ -139,7 +139,13 @@ impl<'a, 'tcx> Visitor<'tcx> for DivergenceVisitor<'a, 'tcx> {
|
|||||||
match e.kind {
|
match e.kind {
|
||||||
// fix #10776
|
// fix #10776
|
||||||
ExprKind::Block(block, ..) => {
|
ExprKind::Block(block, ..) => {
|
||||||
if let Some(stmt) = block.stmts.first() && block.stmts.len() == 1 {
|
if let Some(e) = block.expr {
|
||||||
|
self.visit_expr(e);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if let [stmt] = block.stmts && block.stmts.len() == 1 {
|
||||||
match stmt.kind {
|
match stmt.kind {
|
||||||
StmtKind::Expr(e) | StmtKind::Semi(e) => self.visit_expr(e),
|
StmtKind::Expr(e) | StmtKind::Semi(e) => self.visit_expr(e),
|
||||||
_ => {},
|
_ => {},
|
||||||
|
@ -40,6 +40,15 @@ fn foobar() {
|
|||||||
// lint blocks as well
|
// lint blocks as well
|
||||||
15 => true || { return; },
|
15 => true || { return; },
|
||||||
16 => false || { return; },
|
16 => false || { return; },
|
||||||
|
// ... and when it's a single expression
|
||||||
|
17 => true || { return },
|
||||||
|
18 => false || { return },
|
||||||
|
// ... but not when there's both an expression and a statement
|
||||||
|
19 => true || { _ = 1; return },
|
||||||
|
20 => false || { _ = 1; return },
|
||||||
|
// ... or multiple statements
|
||||||
|
21 => true || { _ = 1; return; },
|
||||||
|
22 => false || { _ = 1; return; },
|
||||||
_ => true || break,
|
_ => true || break,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,84 @@
|
|||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:20:10
|
||||||
|
|
|
||||||
|
LL | b || diverge();
|
||||||
|
| ^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: `-D clippy::diverging-sub-expression` implied by `-D warnings`
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:21:10
|
||||||
|
|
|
||||||
|
LL | b || A.foo();
|
||||||
|
| ^^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:31:26
|
||||||
|
|
|
||||||
|
LL | 6 => true || return,
|
||||||
|
| ^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:32:26
|
||||||
|
|
|
||||||
|
LL | 7 => true || continue,
|
||||||
|
| ^^^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:35:26
|
||||||
|
|
|
||||||
|
LL | 3 => true || diverge(),
|
||||||
|
| ^^^^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:38:30
|
||||||
|
|
|
||||||
|
LL | _ => true || panic!("boo"),
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= 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)
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:41:29
|
||||||
|
|
|
||||||
|
LL | 15 => true || { return; },
|
||||||
|
| ^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:42:30
|
||||||
|
|
|
||||||
|
LL | 16 => false || { return; },
|
||||||
|
| ^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:44:29
|
||||||
|
|
|
||||||
|
LL | 17 => true || { return },
|
||||||
|
| ^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:45:30
|
||||||
|
|
|
||||||
|
LL | 18 => false || { return },
|
||||||
|
| ^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:47:36
|
||||||
|
|
|
||||||
|
LL | 19 => true || { _ = 1; return },
|
||||||
|
| ^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:48:37
|
||||||
|
|
|
||||||
|
LL | 20 => false || { _ = 1; return },
|
||||||
|
| ^^^^^^
|
||||||
|
|
||||||
|
error: sub-expression diverges
|
||||||
|
--> $DIR/diverging_sub_expression.rs:52:26
|
||||||
|
|
|
||||||
|
LL | _ => true || break,
|
||||||
|
| ^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 13 previous errors
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user