about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-09-15 11:35:11 +0000
committerbors <bors@rust-lang.org>2015-09-15 11:35:11 +0000
commit7161530fc4d2612eda627e79e1fee3f989fce0f7 (patch)
tree18ad910144d9402d4a4e87762921868b3d9f95bc
parent6d154af14a33260bcf6b36593859dcb7d644d6fa (diff)
parentcfa2925f2e4f9832aaa1c439163ff6b24cac8342 (diff)
downloadrust-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.rs18
-rw-r--r--src/test/compile-fail/issue-20427.rs2
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;
     }
 }