diff options
| author | bors <bors@rust-lang.org> | 2015-09-15 11:35:11 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-09-15 11:35:11 +0000 |
| commit | 7161530fc4d2612eda627e79e1fee3f989fce0f7 (patch) | |
| tree | 18ad910144d9402d4a4e87762921868b3d9f95bc | |
| parent | 6d154af14a33260bcf6b36593859dcb7d644d6fa (diff) | |
| parent | cfa2925f2e4f9832aaa1c439163ff6b24cac8342 (diff) | |
| download | rust-7161530fc4d2612eda627e79e1fee3f989fce0f7.tar.gz rust-7161530fc4d2612eda627e79e1fee3f989fce0f7.zip | |
Auto merge of #28406 - petrochenkov:primitive, r=eddyb
This was missing from https://github.com/rust-lang/rust/pull/27451 r? @eddyb
| -rw-r--r-- | src/librustc_resolve/lib.rs | 18 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-20427.rs | 2 |
2 files changed, 18 insertions, 2 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 8939028f6d9..79aa4e53522 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -2211,13 +2211,27 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { ItemUse(ref view_path) => { // check for imports shadowing primitive types - if let hir::ViewPathSimple(ident, _) = view_path.node { - match self.def_map.borrow().get(&item.id).map(|d| d.full_def()) { + let check_rename = |id, ident: Ident| { + match self.def_map.borrow().get(&id).map(|d| d.full_def()) { Some(DefTy(..)) | Some(DefStruct(..)) | Some(DefTrait(..)) | None => { self.check_if_primitive_type_name(ident.name, item.span); } _ => {} } + }; + + match view_path.node { + hir::ViewPathSimple(ident, _) => { + check_rename(item.id, ident); + } + hir::ViewPathList(_, ref items) => { + for item in items { + if let Some(ident) = item.node.rename() { + check_rename(item.node.id(), ident); + } + } + } + _ => {} } } diff --git a/src/test/compile-fail/issue-20427.rs b/src/test/compile-fail/issue-20427.rs index 96d4fae8b03..a4b25ab9e56 100644 --- a/src/test/compile-fail/issue-20427.rs +++ b/src/test/compile-fail/issue-20427.rs @@ -47,6 +47,8 @@ mod char { //~^ ERROR user-defined types or type parameters cannot shadow the primitive types use super::bool_ as bool; //~^ ERROR user-defined types or type parameters cannot shadow the primitive types + use super::{bool_ as str}; + //~^ ERROR user-defined types or type parameters cannot shadow the primitive types use super::char_ as char; } } |
