https://gcc.gnu.org/g:3b338a1ce871cbf36731d56f02d1d458243c1c23
commit r17-3125-g3b338a1ce871cbf36731d56f02d1d458243c1c23 Author: Aiman Najjar <[email protected]> Date: Fri Jul 31 22:32:03 2026 -0400 gccrs: Fix duplicate unused assignment removals Fixes Rust-GCC/gccrs#4674 gcc/rust/ChangeLog: * checks/lints/unused/rust-unused-context.cc (UnusedContext::remove_assign): Fix issue with duplicate removal of unused-assignment for the same id. gcc/testsuite/ChangeLog: * rust/compile/issue-4674.rs: New test. Signed-off-by: Aiman Najjar <[email protected]> Diff: --- gcc/rust/checks/lints/unused/rust-unused-context.cc | 7 ++++++- gcc/testsuite/rust/compile/issue-4674.rs | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/gcc/rust/checks/lints/unused/rust-unused-context.cc b/gcc/rust/checks/lints/unused/rust-unused-context.cc index 9b26e01bccee..8a68a601acc3 100644 --- a/gcc/rust/checks/lints/unused/rust-unused-context.cc +++ b/gcc/rust/checks/lints/unused/rust-unused-context.cc @@ -44,7 +44,12 @@ void UnusedContext::remove_assign (HirId id_def) { if (assigned_vars.find (id_def) != assigned_vars.end ()) - assigned_vars[id_def].pop_back (); + { + assigned_vars[id_def].pop_back (); + + if (assigned_vars[id_def].empty ()) + assigned_vars.erase (id_def); + } } bool diff --git a/gcc/testsuite/rust/compile/issue-4674.rs b/gcc/testsuite/rust/compile/issue-4674.rs new file mode 100644 index 000000000000..f787c5c4bcfd --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-4674.rs @@ -0,0 +1,15 @@ +// { dg-additional-options "-frust-unused-check-2.0" } +#![feature(no_core)] +#![no_core] + +fn foo(mut n: i32) { + // { dg-warning "function is never used: .foo." "" { target *-*-* } .-1 } + if false { + n = 0i32; + } + + if n > 0i32 { + let _ = 1i32 / n; + } +} +
