also lint single expression blocks

Update mixed_read_write_in_expression.rs

Update diverging_sub_expression.stderr
This commit is contained in:
Centri3 2023-05-18 22:13:44 -05:00
parent 5825b9e3e2
commit 0c545c7bcc
3 changed files with 100 additions and 1 deletions

View File

@ -139,7 +139,13 @@ impl<'a, 'tcx> Visitor<'tcx> for DivergenceVisitor<'a, 'tcx> {
match e.kind {
// fix #10776
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 {
StmtKind::Expr(e) | StmtKind::Semi(e) => self.visit_expr(e),
_ => {},

View File

@ -40,6 +40,15 @@ fn foobar() {
// lint blocks as well
15 => true || { 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,
};
}

View File

@ -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