about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--clippy_lints/src/only_used_in_recursion.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/clippy_lints/src/only_used_in_recursion.rs b/clippy_lints/src/only_used_in_recursion.rs
index ace00333bd1..81c40a6a379 100644
--- a/clippy_lints/src/only_used_in_recursion.rs
+++ b/clippy_lints/src/only_used_in_recursion.rs
@@ -126,8 +126,20 @@ impl<'tcx> LateLintPass<'tcx> for OnlyUsedInRecursion {
                 }
             }
 
+            let mut pre_order = FxHashMap::default();
+
+            visitor.graph.iter().for_each(|(_, next)| {
+                next.iter().for_each(|i| {
+                    *pre_order.entry(*i).or_insert(0) += 1;
+                });
+            });
+
             for (id, span, ident) in param_span {
-                if !visitor.has_side_effect.contains(&id) {
+                // if the variable is not used in recursion, it would be marked as unused
+                if !visitor.has_side_effect.contains(&id)
+                    && *pre_order.get(&id).unwrap_or(&0) > 0
+                    && visitor.graph.contains_key(&id)
+                {
                     span_lint_and_sugg(
                         cx,
                         ONLY_USED_IN_RECURSION,