[COMMITTED 66/77] gccrs: Fix duplicate unused assignment removals

[email protected]
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.rust
Message-ID <[email protected]>
From: Aiman Najjar <[email protected]>

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]>
---
 .../checks/lints/unused/rust-unused-context.cc    |  7 ++++++-
 gcc/testsuite/rust/compile/issue-4674.rs          | 15 +++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/rust/compile/issue-4674.rs

diff --git a/gcc/rust/checks/lints/unused/rust-unused-context.cc b/gcc/rust/checks/lints/unused/rust-unused-context.cc
index 9b26e01bcce..8a68a601acc 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 00000000000..f787c5c4bcf
--- /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;
+    }
+}
+
-- 
2.50.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.