From c02d577c53dc29fcef0c589af8d95d037777a09b Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Sun, 15 Jan 2017 03:09:48 +0000 Subject: [PATCH] Improve the warning cycle for `use $crate;`. --- src/librustc_resolve/build_reduced_graph.rs | 5 ++++- src/test/compile-fail/auxiliary/import_crate_var.rs | 7 ++++++- src/test/compile-fail/import-crate-var.rs | 6 ++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/librustc_resolve/build_reduced_graph.rs b/src/librustc_resolve/build_reduced_graph.rs index 5be21bc62c56c..5e9856878865a 100644 --- a/src/librustc_resolve/build_reduced_graph.rs +++ b/src/librustc_resolve/build_reduced_graph.rs @@ -143,7 +143,7 @@ impl<'a> Resolver<'a> { let is_prelude = attr::contains_name(&item.attrs, "prelude_import"); match view_path.node { - ViewPathSimple(binding, ref full_path) => { + ViewPathSimple(mut binding, ref full_path) => { let mut source = full_path.segments.last().unwrap().identifier; let source_name = source.name; if source_name == "mod" || source_name == "self" { @@ -157,6 +157,9 @@ impl<'a> Resolver<'a> { ModuleKind::Block(..) => unreachable!(), }; source.name = crate_name; + if binding.name == "$crate" { + binding.name = crate_name; + } self.session.struct_span_warn(item.span, "`$crate` may not be imported") .note("`use $crate;` was erroneously allowed and \ diff --git a/src/test/compile-fail/auxiliary/import_crate_var.rs b/src/test/compile-fail/auxiliary/import_crate_var.rs index 1dfc7a128aa1c..a8a55afa41a0e 100644 --- a/src/test/compile-fail/auxiliary/import_crate_var.rs +++ b/src/test/compile-fail/auxiliary/import_crate_var.rs @@ -8,5 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +pub fn f() {} + #[macro_export] -macro_rules! m { () => { use $crate; } } +macro_rules! m { () => { + use $crate; + import_crate_var::f(); +} } diff --git a/src/test/compile-fail/import-crate-var.rs b/src/test/compile-fail/import-crate-var.rs index 9f573945483de..e58ba2c88917f 100644 --- a/src/test/compile-fail/import-crate-var.rs +++ b/src/test/compile-fail/import-crate-var.rs @@ -11,11 +11,13 @@ // aux-build:import_crate_var.rs // error-pattern: `$crate` may not be imported // error-pattern: `use $crate;` was erroneously allowed and will become a hard error +// error-pattern: compilation successful #![feature(rustc_attrs)] #[macro_use] extern crate import_crate_var; -m!(); #[rustc_error] -fn main() {} +fn main() { + m!(); +}