diff options
| author | bors <bors@rust-lang.org> | 2016-12-25 18:13:54 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2016-12-25 18:13:54 +0000 |
| commit | 20b6c160cac48d046e4fb21c70c31ce9339799fb (patch) | |
| tree | 4fe5ae53401836742b5eb4fa614e663a1e126db0 | |
| parent | c74ac6cb97ae77429258c3bff2938714f6a329ca (diff) | |
| parent | 098c9b69e113c1894fad39acbadd63a3aaca458c (diff) | |
| download | rust-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.rs | 3 | ||||
| -rw-r--r-- | src/test/compile-fail/recursive-reexports.rs | 4 |
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() {} |
