diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2016-06-29 21:21:24 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-06-29 21:21:24 +0530 |
| commit | 8e2598c3d2eb61e487e4ee5908f40211350a44e2 (patch) | |
| tree | 672cc08bca130b9c1af36e8fcf5cd5435a01cbf0 | |
| parent | cc15c211c5af9d43f141763af4895352324402c7 (diff) | |
| parent | 9ffe1c9fba7d1327b1836188f76ca430e0333690 (diff) | |
| download | rust-8e2598c3d2eb61e487e4ee5908f40211350a44e2.tar.gz rust-8e2598c3d2eb61e487e4ee5908f40211350a44e2.zip | |
Rollup merge of #34542 - jseyfried:fix_recursive_modules, r=nrc
Fix non-termination on recursive module re-exports in extern crates Fixes #33776. r? @nrc
| -rw-r--r-- | src/librustc_resolve/lib.rs | 4 | ||||
| -rw-r--r-- | src/test/compile-fail/auxiliary/recursive_reexports.rs | 13 | ||||
| -rw-r--r-- | src/test/compile-fail/recursive-reexports.rs | 15 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 9c9e3ff037b..ed400af6685 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -3207,7 +3207,9 @@ 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(); - worklist.push((module, path_segments, is_extern)); + if !worklist.iter().any(|&(m, _, _)| m.def == module.def) { + worklist.push((module, path_segments, is_extern)); + } } } }) diff --git a/src/test/compile-fail/auxiliary/recursive_reexports.rs b/src/test/compile-fail/auxiliary/recursive_reexports.rs new file mode 100644 index 00000000000..1186e3d62f7 --- /dev/null +++ b/src/test/compile-fail/auxiliary/recursive_reexports.rs @@ -0,0 +1,13 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub mod foo { + pub use foo; +} diff --git a/src/test/compile-fail/recursive-reexports.rs b/src/test/compile-fail/recursive-reexports.rs new file mode 100644 index 00000000000..6fd52beeec6 --- /dev/null +++ b/src/test/compile-fail/recursive-reexports.rs @@ -0,0 +1,15 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// aux-build:recursive_reexports.rs + +fn f() -> recursive_reexports::S {} //~ ERROR undeclared + +fn main() {} |
