about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2024-01-19 01:06:08 +0100
committerSamuel Tardieu <sam@rfc1149.net>2024-01-19 01:06:08 +0100
commitc6079a6880ffa29a49edeb48520f220963b01c3e (patch)
treedc8187f510255710e076274aa609c7ac8d79cc91
parent4b3a9c09f32b725c77acbbf411158cb03af7a36a (diff)
downloadrust-c6079a6880ffa29a49edeb48520f220963b01c3e.tar.gz
rust-c6079a6880ffa29a49edeb48520f220963b01c3e.zip
blocks_in_conditions: do not warn if condition comes from macro
-rw-r--r--clippy_lints/src/blocks_in_conditions.rs5
-rw-r--r--tests/ui/blocks_in_conditions.fixed14
-rw-r--r--tests/ui/blocks_in_conditions.rs14
3 files changed, 33 insertions, 0 deletions
diff --git a/clippy_lints/src/blocks_in_conditions.rs b/clippy_lints/src/blocks_in_conditions.rs
index 1417e230aee..ff4dffd0607 100644
--- a/clippy_lints/src/blocks_in_conditions.rs
+++ b/clippy_lints/src/blocks_in_conditions.rs
@@ -67,6 +67,11 @@ impl<'tcx> LateLintPass<'tcx> for BlocksInConditions {
         );
 
         if let ExprKind::Block(block, _) = &cond.kind {
+            if !block.span.eq_ctxt(expr.span) {
+                // If the block comes from a macro, or as an argument to a macro,
+                // do not lint.
+                return;
+            }
             if block.rules == BlockCheckMode::DefaultBlock {
                 if block.stmts.is_empty() {
                     if let Some(ex) = &block.expr {
diff --git a/tests/ui/blocks_in_conditions.fixed b/tests/ui/blocks_in_conditions.fixed
index 2ab441bbd0c..efef60567a9 100644
--- a/tests/ui/blocks_in_conditions.fixed
+++ b/tests/ui/blocks_in_conditions.fixed
@@ -85,4 +85,18 @@ fn block_in_match_expr(num: i32) -> i32 {
     }
 }
 
+// issue #12162
+macro_rules! timed {
+    ($name:expr, $body:expr $(,)?) => {{
+        let __scope = ();
+        $body
+    }};
+}
+
+fn issue_12162() {
+    if timed!("check this!", false) {
+        println!();
+    }
+}
+
 fn main() {}
diff --git a/tests/ui/blocks_in_conditions.rs b/tests/ui/blocks_in_conditions.rs
index dd5ae4fb486..8bd8a939eb1 100644
--- a/tests/ui/blocks_in_conditions.rs
+++ b/tests/ui/blocks_in_conditions.rs
@@ -85,4 +85,18 @@ fn block_in_match_expr(num: i32) -> i32 {
     }
 }
 
+// issue #12162
+macro_rules! timed {
+    ($name:expr, $body:expr $(,)?) => {{
+        let __scope = ();
+        $body
+    }};
+}
+
+fn issue_12162() {
+    if timed!("check this!", false) {
+        println!();
+    }
+}
+
 fn main() {}