From 1a6092e05cecdaef984b2b0174089e6ae8c24181 Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Tue, 8 Mar 2016 22:27:12 +0000 Subject: [PATCH] Forbid `use Trait::*` --- src/librustc_resolve/resolve_imports.rs | 4 ++++ src/test/compile-fail/issue-30560.rs | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index f1f47381e4c8..e604107f338a 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -586,6 +586,10 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> { target_module: Module<'b>, directive: &'b ImportDirective) -> ResolveResult<()> { + if let Some(Def::Trait(_)) = target_module.def { + self.resolver.session.span_err(directive.span, "items in traits are not importable."); + } + if module_.def_id() == target_module.def_id() { // This means we are trying to glob import a module into itself, and it is a no-go let msg = "Cannot glob-import a module into itself.".into(); diff --git a/src/test/compile-fail/issue-30560.rs b/src/test/compile-fail/issue-30560.rs index 6109922502b9..71c7e6009655 100644 --- a/src/test/compile-fail/issue-30560.rs +++ b/src/test/compile-fail/issue-30560.rs @@ -12,4 +12,7 @@ type Alias = (); use Alias::*; //~ ERROR Not a module use std::io::Result::*; //~ ERROR Not a module +trait T {} +use T::*; //~ ERROR items in traits are not importable + fn main() {}