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 {
|
||||
// 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),
|
||||
_ => {},
|
||||
|
@ -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,
|
||||
};
|
||||
}
|
||||
|
@ -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