about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAda Alakbarova <ada.alakbarova@proton.me>2025-09-13 11:11:48 +0200
committerAda Alakbarova <ada.alakbarova@proton.me>2025-09-13 12:24:01 +0200
commit6f3f1f3aa71c1d8dfdb86ff47255979bcfdb5cda (patch)
tree5d4c4d4254676ab5f99b6cb21d5a5a823b214077
parent1d0582a0e2c248c909d9c3813f6605a3b39ffd5a (diff)
downloadrust-6f3f1f3aa71c1d8dfdb86ff47255979bcfdb5cda.tar.gz
rust-6f3f1f3aa71c1d8dfdb86ff47255979bcfdb5cda.zip
fix(needless_return): FP with `cfg`d code after `return`
-rw-r--r--clippy_lints/src/returns/needless_return.rs11
-rw-r--r--tests/ui/needless_return.fixed7
-rw-r--r--tests/ui/needless_return.rs7
3 files changed, 24 insertions, 1 deletions
diff --git a/clippy_lints/src/returns/needless_return.rs b/clippy_lints/src/returns/needless_return.rs
index 0a1ba7b5bec..04739fc1b22 100644
--- a/clippy_lints/src/returns/needless_return.rs
+++ b/clippy_lints/src/returns/needless_return.rs
@@ -2,7 +2,7 @@ use clippy_utils::diagnostics::span_lint_hir_and_then;
 use clippy_utils::source::snippet_with_context;
 use clippy_utils::{
     binary_expr_needs_parentheses, is_from_proc_macro, leaks_droppable_temporary_with_limited_lifetime,
-    span_find_starting_semi, sym,
+    span_contains_cfg, span_find_starting_semi, sym,
 };
 use rustc_ast::MetaItemInner;
 use rustc_errors::Applicability;
@@ -83,6 +83,15 @@ fn check_block_return<'tcx>(cx: &LateContext<'tcx>, expr_kind: &ExprKind<'tcx>,
         if let Some(block_expr) = block.expr {
             check_final_expr(cx, block_expr, semi_spans, RetReplacement::Empty, None);
         } else if let Some(stmt) = block.stmts.last() {
+            if span_contains_cfg(
+                cx,
+                Span::between(
+                    stmt.span,
+                    cx.sess().source_map().end_point(block.span), // the closing brace of the block
+                ),
+            ) {
+                return;
+            }
             match stmt.kind {
                 StmtKind::Expr(expr) => {
                     check_final_expr(cx, expr, semi_spans, RetReplacement::Empty, None);
diff --git a/tests/ui/needless_return.fixed b/tests/ui/needless_return.fixed
index d571b97f519..f5f8bb21e81 100644
--- a/tests/ui/needless_return.fixed
+++ b/tests/ui/needless_return.fixed
@@ -517,3 +517,10 @@ mod else_ifs {
         }
     }
 }
+
+fn issue14474() -> u64 {
+    return 456;
+
+    #[cfg(false)]
+    123
+}
diff --git a/tests/ui/needless_return.rs b/tests/ui/needless_return.rs
index 2e4348ea338..495516c1c2e 100644
--- a/tests/ui/needless_return.rs
+++ b/tests/ui/needless_return.rs
@@ -526,3 +526,10 @@ mod else_ifs {
         }
     }
 }
+
+fn issue14474() -> u64 {
+    return 456;
+
+    #[cfg(false)]
+    123
+}