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;
+    }
+}

Reply via email to