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 @@ fn lookup_candidates(&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(); - 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 or the MIT license +// , 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 or the MIT license +// , 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() {}