]> git.lizzy.rs Git - rust.git/commitdiff
Fix non-termination in `resolve`.
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Thu, 22 Dec 2016 08:27:26 +0000 (08:27 +0000)
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Thu, 22 Dec 2016 08:58:10 +0000 (08:58 +0000)
src/librustc_resolve/lib.rs
src/test/compile-fail/recursive-reexports.rs

index f73227681c5e159a1ace316489174e15ac233d27..091dc9fd4bc7f36ea95f19ac90354898d43ba015 100644 (file)
@@ -2943,6 +2943,7 @@ fn lookup_candidates<FilterFn>(&mut self,
 
         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,
@@ -2989,7 +2990,7 @@ fn lookup_candidates<FilterFn>(&mut self,
                     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));
                         }
                     }
index 6fd52beeec62c444243a402978169da346c07c39..aa444d45eeb7a1dbb56eb8ef38371cad49abfef2 100644 (file)
@@ -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() {}