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]>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.
Commit on github:
https://github.com/Rust-GCC/gccrs/commit/dee8434fe7cd203275e65dcfb6813afcef77e906
The commit has NOT been mentioned in any issue.
The commit has been mentioned in the following pull-request(s):
- https://github.com/Rust-GCC/gccrs/pull/4700
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 7fb963049..cb354fdee 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 bcee6c2c1..897c54158 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 000000000..0313d9dba
--- /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;
base-commit: 76397e896150e3bf04567fc8df45ef780df4e501
--
2.54.0