diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-10-27 16:46:48 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-10-28 02:56:11 +0300 |
| commit | b45b4daba75eb6d48ebd86ac56c5ff29c3637a12 (patch) | |
| tree | 4942031f153f6839fd6094d21de3e931301df590 | |
| parent | 171df347ff564ef4d406042227d071515e799113 (diff) | |
resolve: Absolute paths may be undetermined on 2018 edition
due to macro-expanded `extern crate` items adding names to extern prelude.
| -rw-r--r-- | src/librustc_resolve/resolve_imports.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs | 18 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index 2b1279ba202..2faed4ad5c9 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 00000000000..b1154f2076b --- /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; +} |
