https://gcc.gnu.org/g:a4169b499c7c556e114c59aa9f82ed01fc68893f

commit r17-3092-ga4169b499c7c556e114c59aa9f82ed01fc68893f
Author: Owen Avery <[email protected]>
Date:   Sun Jul 12 11:37:31 2026 -0400

    gccrs: Name resolve external types
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-toplevel-name-resolver-2.0.cc
            (TopLevel::visit (ExternalTypeItem)): New function definition.
            * resolve/rust-toplevel-name-resolver-2.0.h
            (TopLevel::visit (ExternalTypeItem)): New function declaration.
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/extern_type_item_resolve.rs: New test.
    
    Signed-off-by: Owen Avery <[email protected]>

Diff:
---
 gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc    | 9 +++++++++
 gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h     | 1 +
 gcc/testsuite/rust/compile/extern_type_item_resolve.rs | 9 +++++++++
 3 files changed, 19 insertions(+)

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 7fb9630490ac..cb354fdee615 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
@@ -391,6 +391,15 @@ TopLevel::visit (AST::TypeAlias &type_item)
   DefaultResolver::visit (type_item);
 }
 
+void
+TopLevel::visit (AST::ExternalTypeItem &type_item)
+{
+  insert_or_error_out (type_item.get_identifier (), type_item,
+                      Namespace::Types);
+
+  DefaultResolver::visit (type_item);
+}
+
 static void flatten_rebind (
   const AST::UseTreeRebind &glob,
   std::vector<std::pair<AST::SimplePath, AST::UseTreeRebind>> &rebind_paths);
diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h 
b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h
index bcee6c2c1cf0..897c54158e58 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h
@@ -183,6 +183,7 @@ private:
   void visit (AST::Union &union_item) override;
   void visit (AST::ConstantItem &const_item) override;
   void visit (AST::TypeAlias &type_item) override;
+  void visit (AST::ExternalTypeItem &type_item) override;
   void visit_extern_crate (AST::ExternCrate &, AST::Crate &, CrateNum) 
override;
   void visit (AST::TypeParam &type_param) override;
   void visit (AST::ConstGenericParam &const_param) override;
diff --git a/gcc/testsuite/rust/compile/extern_type_item_resolve.rs 
b/gcc/testsuite/rust/compile/extern_type_item_resolve.rs
new file mode 100644
index 000000000000..0313d9dbade4
--- /dev/null
+++ b/gcc/testsuite/rust/compile/extern_type_item_resolve.rs
@@ -0,0 +1,9 @@
+// { dg-additional-options "-frust-compile-until=typecheck" }
+#![feature(no_core, extern_types)]
+#![no_core]
+
+extern "C" {
+    type X;
+}
+
+type Y = X;

Reply via email to