From 3328ce3b869255a08dec5ec62f7f63cffa196f1d Mon Sep 17 00:00:00 2001 From: Vineeth Kashyap Date: Thu, 16 Jan 2025 17:51:14 -0500 Subject: [PATCH] [lint] Don't lint needless mut reference on _ignored variables --- .../needless_mutable_reference.rs | 10 +++++++--- .../needless_mutable_reference_warn.move | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/third_party/move/tools/move-linter/src/stackless_bytecode_lints/needless_mutable_reference.rs b/third_party/move/tools/move-linter/src/stackless_bytecode_lints/needless_mutable_reference.rs index 9ca43f6f4a1d0..b4c8d1572e7f7 100644 --- a/third_party/move/tools/move-linter/src/stackless_bytecode_lints/needless_mutable_reference.rs +++ b/third_party/move/tools/move-linter/src/stackless_bytecode_lints/needless_mutable_reference.rs @@ -54,7 +54,7 @@ impl MutableReferenceUsageTracker { for instr in target.get_bytecode() { tracker.update(target, instr); } - tracker.get_mutably_unused_locations() + tracker.get_mutably_unused_locations(target) } /// Get an initial tracker from function parameters. @@ -67,11 +67,15 @@ impl MutableReferenceUsageTracker { } /// Get locations where origins are not used mutably. - fn get_mutably_unused_locations(self) -> Vec { + fn get_mutably_unused_locations(self, target: &FunctionTarget) -> Vec { self.origins .into_iter() .filter_map(|(t, loc)| { - if !self.mutably_used.contains(&t) { + let ignore_local = target + .symbol_pool() + .string(target.get_local_name(t)) + .starts_with('_'); + if !ignore_local && !self.mutably_used.contains(&t) { Some(loc) } else { None diff --git a/third_party/move/tools/move-linter/tests/stackless_bytecode_lints/needless_mutable_reference_warn.move b/third_party/move/tools/move-linter/tests/stackless_bytecode_lints/needless_mutable_reference_warn.move index 980467bf51f68..119cce33f8d53 100644 --- a/third_party/move/tools/move-linter/tests/stackless_bytecode_lints/needless_mutable_reference_warn.move +++ b/third_party/move/tools/move-linter/tests/stackless_bytecode_lints/needless_mutable_reference_warn.move @@ -253,3 +253,10 @@ module 0xc0ffee::more_struct_tests { consume_immut(u); } } + +module 0xc0ffee::p { + fun no_warn_01(_x: &mut u64) { + let x = 1; + let _y = &mut x; + } +}