From b45b4daba75eb6d48ebd86ac56c5ff29c3637a12 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sat, 27 Oct 2018 16:46:48 +0300 Subject: [PATCH] resolve: Absolute paths may be undetermined on 2018 edition due to macro-expanded `extern crate` items adding names to extern prelude. --- src/librustc_resolve/resolve_imports.rs | 3 +++ ...n-prelude-extern-crate-absolute-expanded.rs | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index 2b1279ba202c6..2faed4ad5c994 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -226,6 +226,9 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> { let module = self.get_module(binding.def().def_id()); self.populate_module_if_necessary(module); return Ok(binding); + } else if !self.graph_root.unresolved_invocations.borrow().is_empty() { + // Macro-expanded `extern crate`items still can add names to extern prelude. + return Err(Undetermined); } else { return Err(Determined); } diff --git a/src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs b/src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs new file mode 100644 index 0000000000000..b1154f2076b80 --- /dev/null +++ b/src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs @@ -0,0 +1,18 @@ +// compile-pass +// edition:2018 + +#![feature(extern_crate_item_prelude)] + +macro_rules! define_iso { () => { + extern crate std as iso; +}} + +::iso::thread_local! { + static S: u8 = 0; +} + +define_iso!(); + +fn main() { + let s = S; +}