about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2017-01-19 15:49:30 -0800
committerAlex Crichton <alex@alexcrichton.com>2017-01-20 08:35:46 -0800
commitbef5ff1121edf2b75c6ae0d8eb2277bea94686b9 (patch)
tree915b62d21cb995b2780170509eac6c80481921bc /src
parent0c7117457dbefa93468f8fb1a85eba75f32e2865 (diff)
parentc02d577c53dc29fcef0c589af8d95d037777a09b (diff)
downloadrust-bef5ff1121edf2b75c6ae0d8eb2277bea94686b9.tar.gz
rust-bef5ff1121edf2b75c6ae0d8eb2277bea94686b9.zip
Rollup merge of #39077 - jseyfried:crate_var_imports, r=nrc
Improve the warning cycle for `use $crate;`

Fixes #39049.
r? @nrc
Diffstat (limited to 'src')
-rw-r--r--src/librustc_resolve/build_reduced_graph.rs5
-rw-r--r--src/test/compile-fail/auxiliary/import_crate_var.rs7
-rw-r--r--src/test/compile-fail/import-crate-var.rs6
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 5be21bc62c5..5e985687886 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 1dfc7a128aa..a8a55afa41a 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 9f573945483..e58ba2c8891 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!();
+}