diff options
| author | Luv-Ray <zhuoxun.yang777@outlook.com> | 2024-04-21 19:53:47 +0800 |
|---|---|---|
| committer | Luv-Ray <zhuoxun.yang777@outlook.com> | 2024-04-21 19:53:47 +0800 |
| commit | 334bab2c253bfe1cdff6c0ebf93b82fb0e963b61 (patch) | |
| tree | 81440a8c931a43f7b5196e5f3e1120fcca834164 | |
| parent | c642d0cab63546ce094b75f2d31e0639d9b12399 (diff) | |
| download | rust-334bab2c253bfe1cdff6c0ebf93b82fb0e963b61.tar.gz rust-334bab2c253bfe1cdff6c0ebf93b82fb0e963b61.zip | |
[`overly_complex_bool_expr`]: Fix trigger wrongly on never type
| -rw-r--r-- | clippy_lints/src/booleans.rs | 5 | ||||
| -rw-r--r-- | tests/ui/overly_complex_bool_expr.fixed | 10 | ||||
| -rw-r--r-- | tests/ui/overly_complex_bool_expr.rs | 10 |
3 files changed, 25 insertions, 0 deletions
diff --git a/clippy_lints/src/booleans.rs b/clippy_lints/src/booleans.rs index b6341b3fe8e..eae34e85e78 100644 --- a/clippy_lints/src/booleans.rs +++ b/clippy_lints/src/booleans.rs @@ -232,6 +232,11 @@ impl<'a, 'tcx, 'v> Hir2Qmm<'a, 'tcx, 'v> { _ => (), } } + + if self.cx.typeck_results().expr_ty(e).is_never() { + return Err("contains never type".to_owned()); + } + for (n, expr) in self.terminals.iter().enumerate() { if eq_expr_value(self.cx, e, expr) { #[expect(clippy::cast_possible_truncation)] diff --git a/tests/ui/overly_complex_bool_expr.fixed b/tests/ui/overly_complex_bool_expr.fixed index e44f6063156..439b1145431 100644 --- a/tests/ui/overly_complex_bool_expr.fixed +++ b/tests/ui/overly_complex_bool_expr.fixed @@ -37,3 +37,13 @@ fn check_expect() { #[expect(clippy::overly_complex_bool_expr)] let _ = a < b && a >= b; } + +#[allow(clippy::never_loop)] +fn check_never_type() { + loop { + _ = (break) || true; + } + loop { + _ = (return) || true; + } +} diff --git a/tests/ui/overly_complex_bool_expr.rs b/tests/ui/overly_complex_bool_expr.rs index f010a8537e7..b96fd1adf11 100644 --- a/tests/ui/overly_complex_bool_expr.rs +++ b/tests/ui/overly_complex_bool_expr.rs @@ -37,3 +37,13 @@ fn check_expect() { #[expect(clippy::overly_complex_bool_expr)] let _ = a < b && a >= b; } + +#[allow(clippy::never_loop)] +fn check_never_type() { + loop { + _ = (break) || true; + } + loop { + _ = (return) || true; + } +} |
