https://gcc.gnu.org/g:5333e241a3691298459b14af882827032b6dccf1

commit r17-1863-g5333e241a3691298459b14af882827032b6dccf1
Author: Owen Avery <[email protected]>
Date:   Mon Jun 1 22:51:45 2026 -0400

    gccrs: Limit globbing visitor
    
    The globbing visitor would previously descend into some kinds of rust
    item, instead of registering them as glob imports or ignoring them. This
    would cause items nested in those items to be glob imported, despite
    them not being top level items inside the glob container.
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-finalize-imports-2.0.cc (GlobbingVisitor::visit):
            Add overrides for more items.
            * resolve/rust-finalize-imports-2.0.h (GlobbingVisitor::visit):
            Likewise.
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/name_resolution27.rs: New test.
    
    Reported-by: Arthur Cohen <[email protected]>
    Signed-off-by: Owen Avery <[email protected]>

Diff:
---
 gcc/rust/resolve/rust-finalize-imports-2.0.cc   | 22 ++++++++++++++++++++++
 gcc/rust/resolve/rust-finalize-imports-2.0.h    |  4 ++++
 gcc/testsuite/rust/compile/name_resolution27.rs | 20 ++++++++++++++++++++
 3 files changed, 46 insertions(+)

diff --git a/gcc/rust/resolve/rust-finalize-imports-2.0.cc 
b/gcc/rust/resolve/rust-finalize-imports-2.0.cc
index a5bbc5b6cd03..8ad9322bbd7b 100644
--- a/gcc/rust/resolve/rust-finalize-imports-2.0.cc
+++ b/gcc/rust/resolve/rust-finalize-imports-2.0.cc
@@ -142,6 +142,28 @@ GlobbingVisitor::visit (AST::ConstantItem &const_item)
                      Namespace::Values);
 }
 
+void
+GlobbingVisitor::visit (AST::TypeAlias &type)
+{
+  ctx.insert_globbed (type.get_new_type_name (), type.get_node_id (),
+                     Namespace::Types);
+}
+
+void
+GlobbingVisitor::visit (AST::Trait &trait)
+{
+  ctx.insert_globbed (trait.get_identifier (), trait.get_node_id (),
+                     Namespace::Types);
+}
+
+void
+GlobbingVisitor::visit (AST::InherentImpl &impl)
+{}
+
+void
+GlobbingVisitor::visit (AST::TraitImpl &impl)
+{}
+
 void
 GlobbingVisitor::visit (AST::ExternCrate &crate)
 {}
diff --git a/gcc/rust/resolve/rust-finalize-imports-2.0.h 
b/gcc/rust/resolve/rust-finalize-imports-2.0.h
index f4a6b57e1e4c..3a1e70266670 100644
--- a/gcc/rust/resolve/rust-finalize-imports-2.0.h
+++ b/gcc/rust/resolve/rust-finalize-imports-2.0.h
@@ -48,6 +48,10 @@ public:
   void visit (AST::Enum &enum_item) override;
   void visit (AST::Union &union_item) override;
   void visit (AST::ConstantItem &const_item) override;
+  void visit (AST::TypeAlias &type) override;
+  void visit (AST::Trait &trait) override;
+  void visit (AST::InherentImpl &impl) override;
+  void visit (AST::TraitImpl &impl) override;
   void visit (AST::ExternCrate &crate) override;
   void visit (AST::UseDeclaration &use) override;
 
diff --git a/gcc/testsuite/rust/compile/name_resolution27.rs 
b/gcc/testsuite/rust/compile/name_resolution27.rs
new file mode 100644
index 000000000000..d1d09b1321b7
--- /dev/null
+++ b/gcc/testsuite/rust/compile/name_resolution27.rs
@@ -0,0 +1,20 @@
+#![feature(no_core)]
+#![no_core]
+
+mod a {
+    trait A {
+        fn foo();
+    }
+
+    struct B;
+
+    impl A for B {
+        fn foo() {}
+    }
+}
+
+use a::*;
+
+pub fn bar() {
+    foo() // { dg-error "Cannot find path" }
+}

Reply via email to