From 262392cd320320029afc3a2d9edad7cd16a32035 Mon Sep 17 00:00:00 2001 From: Eduard-Mihai Burtescu Date: Tue, 14 Aug 2018 11:26:44 +0300 Subject: [PATCH] rustc_resolve: crates only exist in the type namespace. --- src/librustc_resolve/resolve_imports.rs | 5 +++-- src/test/run-pass/issue-53333.rs | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 src/test/run-pass/issue-53333.rs diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index 1d8cc609f95..35e58bc9fee 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -194,13 +194,14 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> { } // Fall back to resolving to an external crate. - if !self.extern_prelude.contains(&ident.name) { + if !(ns == TypeNS && self.extern_prelude.contains(&ident.name)) { // ... unless the crate name is not in the `extern_prelude`. return binding; } } let crate_root = if + ns == TypeNS && root != keywords::Extern.name() && ( ident.name == keywords::Crate.name() || @@ -208,7 +209,7 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> { ) { self.resolve_crate_root(ident) - } else if !ident.is_path_segment_keyword() { + } else if ns == TypeNS && !ident.is_path_segment_keyword() { let crate_id = self.crate_loader.process_path_extern(ident.name, ident.span); self.get_module(DefId { krate: crate_id, index: CRATE_DEF_INDEX }) diff --git a/src/test/run-pass/issue-53333.rs b/src/test/run-pass/issue-53333.rs new file mode 100644 index 00000000000..51b90af7164 --- /dev/null +++ b/src/test/run-pass/issue-53333.rs @@ -0,0 +1,17 @@ +// Copyright 2018 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. + +// edition:2018 + +fn main() { + use std; + let std = "std"; + println!("{}", std); +}