Rollup merge of #39077 - jseyfried:crate_var_imports, r=nrc

Improve the warning cycle for `use $crate;`

Fixes #39049.
r? @nrc
This commit is contained in:
Alex Crichton 2017-01-19 15:49:30 -08:00
commit bef5ff1121
3 changed files with 14 additions and 4 deletions

View file

@ -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 \

View file

@ -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();
} }

View file

@ -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!();
}