about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLuv-Ray <zhuoxun.yang777@outlook.com>2024-04-21 19:53:47 +0800
committerLuv-Ray <zhuoxun.yang777@outlook.com>2024-04-21 19:53:47 +0800
commit334bab2c253bfe1cdff6c0ebf93b82fb0e963b61 (patch)
tree81440a8c931a43f7b5196e5f3e1120fcca834164
parentc642d0cab63546ce094b75f2d31e0639d9b12399 (diff)
downloadrust-334bab2c253bfe1cdff6c0ebf93b82fb0e963b61.tar.gz
rust-334bab2c253bfe1cdff6c0ebf93b82fb0e963b61.zip
[`overly_complex_bool_expr`]: Fix trigger wrongly on never type
-rw-r--r--clippy_lints/src/booleans.rs5
-rw-r--r--tests/ui/overly_complex_bool_expr.fixed10
-rw-r--r--tests/ui/overly_complex_bool_expr.rs10
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;
+    }
+}