[gcc r17-3121] gccrs: Fix multiple glob imports in a use decl

Arthur Cohen via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:c9112a01f3c71e3535b2e3a5935cd67d14f5d58a

commit r17-3121-gc9112a01f3c71e3535b2e3a5935cd67d14f5d58a
Author: Owen Avery <[email protected]>
Date:   Wed Jul 15 23:51:06 2026 -0400

    gccrs: Fix multiple glob imports in a use decl
    
    Also removes some dead code in flatten, since I saw it while working on
    this PR and it's too small to be its own patch.
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-early-name-resolver-2.0.cc
            (Early::resolve_glob_import): Handle glob imports that appear
            after other imports in a use declaration.
            * resolve/rust-early-name-resolver-2.0.h
            (Early::ImportMappings::insert): Remove member functions, as
            they're both broken and unused.
            * resolve/rust-toplevel-name-resolver-2.0.cc (flatten): Remove
            redundant break statement.
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/glob_import_brace.rs: New test.
    
    Signed-off-by: Owen Avery <[email protected]>

Diff:
---
 gcc/rust/resolve/rust-early-name-resolver-2.0.cc    |  7 ++++---
 gcc/rust/resolve/rust-early-name-resolver-2.0.h     | 11 -----------
 gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc |  1 -
 gcc/testsuite/rust/compile/glob_import_brace.rs     | 14 ++++++++++++++
 4 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/gcc/rust/resolve/rust-early-name-resolver-2.0.cc b/gcc/rust/resolve/rust-early-name-resolver-2.0.cc
index 1c87804a7330..12f29ceed7c2 100644
--- a/gcc/rust/resolve/rust-early-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-early-name-resolver-2.0.cc
@@ -99,14 +99,15 @@ Early::resolve_glob_import (NodeId use_dec_id, TopLevel::ImportKind &&glob)
   if (!result)
     return false;
 
+  auto &imports = import_mappings.new_or_access (use_dec_id);
+
   // here, we insert the module's NodeId into the import_mappings and will look
   // up the module proper in `FinalizeImports`
   // The namespace does not matter here since we are dealing with a glob
   // FIXME: Does the namespace not matter? Is that valid?
   // TODO: Ugly
-  import_mappings.insert (use_dec_id,
-			  ImportPair (std::move (glob),
-				      ImportData::Glob (resolved->definition)));
+  imports.emplace_back (
+    ImportPair (std::move (glob), ImportData::Glob (resolved->definition)));
 
   return true;
 }
diff --git a/gcc/rust/resolve/rust-early-name-resolver-2.0.h b/gcc/rust/resolve/rust-early-name-resolver-2.0.h
index 235595e8d01f..7ea9e9f2ccc4 100644
--- a/gcc/rust/resolve/rust-early-name-resolver-2.0.h
+++ b/gcc/rust/resolve/rust-early-name-resolver-2.0.h
@@ -157,17 +157,6 @@ public:
       return iter.first->second;
     }
 
-    void insert (NodeId path_id, std::vector<ImportPair> &&pairs)
-    {
-      mappings.insert ({{path_id}, std::move (pairs)});
-    }
-
-    // Same as `insert`, but with just one node
-    void insert (NodeId path_id, ImportPair &&pair)
-    {
-      mappings.insert ({{path_id}, {pair}});
-    }
-
     std::vector<ImportPair> &get (NodeId use_id) { return mappings[use_id]; }
 
   private:
diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
index cb354fdee615..117bb32fb0f5 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
@@ -440,7 +440,6 @@ flatten (
 	flatten_glob (*glob, glob_paths, ctx);
 	break;
       }
-      break;
     }
 }
 
diff --git a/gcc/testsuite/rust/compile/glob_import_brace.rs b/gcc/testsuite/rust/compile/glob_import_brace.rs
new file mode 100644
index 000000000000..22e44664a982
--- /dev/null
+++ b/gcc/testsuite/rust/compile/glob_import_brace.rs
@@ -0,0 +1,14 @@
+#![feature(no_core)]
+#![no_core]
+
+mod a {}
+
+mod b {
+    pub struct X;
+
+    mod c {
+        use crate::{a::*, b::*};
+
+        type Y = X;
+    }
+}
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.