From: Owen Avery <[email protected]>
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]>
---
gcc/rust/resolve/rust-early-name-resolver-2.0.cc | 7 ++++---
gcc/rust/resolve/rust-early-name-resolver-2.0.h | 11 -----------
.../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(-)
create mode 100644 gcc/testsuite/rust/compile/glob_import_brace.rs
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 1c87804a733..12f29ceed7c 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 235595e8d01..7ea9e9f2ccc 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 cb354fdee61..117bb32fb0f 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 00000000000..22e44664a98
--- /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;
+ }
+}
--
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.