about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-12-25 18:13:54 +0000
committerbors <bors@rust-lang.org>2016-12-25 18:13:54 +0000
commit20b6c160cac48d046e4fb21c70c31ce9339799fb (patch)
tree4fe5ae53401836742b5eb4fa614e663a1e126db0
parentc74ac6cb97ae77429258c3bff2938714f6a329ca (diff)
parent098c9b69e113c1894fad39acbadd63a3aaca458c (diff)
downloadrust-20b6c160cac48d046e4fb21c70c31ce9339799fb.tar.gz
rust-20b6c160cac48d046e4fb21c70c31ce9339799fb.zip
Auto merge of #38539 - jseyfried:fix_resolve_hang, r=eddyb
resolve: fix non-termination

Fixes #34324.
r? @eddyb
-rw-r--r--src/librustc_resolve/lib.rs3
-rw-r--r--src/test/compile-fail/recursive-reexports.rs4
2 files changed, 5 insertions, 2 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index dbeb8fe63b6..8575b04b531 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -2931,6 +2931,7 @@ impl<'a> Resolver<'a> {
 
         let mut lookup_results = Vec::new();
         let mut worklist = Vec::new();
+        let mut seen_modules = FxHashSet();
         worklist.push((self.graph_root, Vec::new(), false));
 
         while let Some((in_module,
@@ -2976,7 +2977,7 @@ impl<'a> Resolver<'a> {
                     if !in_module_is_extern || name_binding.vis == ty::Visibility::Public {
                         // add the module to the lookup
                         let is_extern = in_module_is_extern || name_binding.is_extern_crate();
-                        if !worklist.iter().any(|&(m, ..)| m.def() == module.def()) {
+                        if seen_modules.insert(module.def_id().unwrap()) {
                             worklist.push((module, path_segments, is_extern));
                         }
                     }
diff --git a/src/test/compile-fail/recursive-reexports.rs b/src/test/compile-fail/recursive-reexports.rs
index 6fd52beeec6..aa444d45eeb 100644
--- a/src/test/compile-fail/recursive-reexports.rs
+++ b/src/test/compile-fail/recursive-reexports.rs
@@ -10,6 +10,8 @@
 
 // aux-build:recursive_reexports.rs
 
-fn f() -> recursive_reexports::S {} //~ ERROR undeclared
+extern crate recursive_reexports;
+
+fn f() -> recursive_reexports::S {} //~ ERROR type name `recursive_reexports::S` is undefined
 
 fn main() {}