[COMMITTED 34/77] gccrs: Name resolve external types

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

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]>
---
 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(+)
 create mode 100644 gcc/testsuite/rust/compile/extern_type_item_resolve.rs

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 7fb9630490a..cb354fdee61 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 bcee6c2c1cf..897c54158e5 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 00000000000..0313d9dbade
--- /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;
-- 
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.