about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-02-26 20:31:00 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-03-04 18:30:24 +0000
commitd908ff1759bf27a8a8a99f113a246b8abc61f425 (patch)
tree4eecfcbd00829b7bf737174cb0436d9fe318a905 /src
parent32f251cc1c1ff8721b68b4afe5f86a6bb33c6822 (diff)
downloadrust-d908ff1759bf27a8a8a99f113a246b8abc61f425.tar.gz
rust-d908ff1759bf27a8a8a99f113a246b8abc61f425.zip
Don't treat associated types specially in `def_privacy`
Improve trait privacy error message
Diffstat (limited to 'src')
-rw-r--r--src/librustc_privacy/lib.rs18
-rw-r--r--src/test/compile-fail/trait-not-accessible.rs2
2 files changed, 7 insertions, 13 deletions
diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs
index 226539b8e80..214ac81ee50 100644
--- a/src/librustc_privacy/lib.rs
+++ b/src/librustc_privacy/lib.rs
@@ -615,16 +615,10 @@ impl<'a, 'tcx> PrivacyVisitor<'a, 'tcx> {
             // decision solely based on the privacy of the method
             // invocation.
             Some(ast_map::NodeImplItem(ii)) => {
-                match ii.node {
-                    hir::ImplItemKind::Const(..) |
-                    hir::ImplItemKind::Method(..) => {
-                        let imp = self.tcx.map.get_parent_did(node_id);
-                        match self.tcx.impl_trait_ref(imp) {
-                            Some(..) => hir::Public,
-                            _ => ii.vis
-                        }
-                    }
-                    hir::ImplItemKind::Type(_) => hir::Public,
+                let imp = self.tcx.map.get_parent_did(node_id);
+                match self.tcx.impl_trait_ref(imp) {
+                    Some(..) => hir::Public,
+                    _ => ii.vis,
                 }
             }
             Some(ast_map::NodeTraitItem(_)) => hir::Public,
@@ -804,8 +798,8 @@ impl<'a, 'tcx> PrivacyVisitor<'a, 'tcx> {
             // Trait methods are always all public. The only controlling factor
             // is whether the trait itself is accessible or not.
             ty::TraitContainer(trait_def_id) => {
-                self.report_error(self.ensure_public(span, trait_def_id,
-                                                     None, "source trait"));
+                let msg = format!("source trait `{}`", self.tcx.item_path_str(trait_def_id));
+                self.report_error(self.ensure_public(span, trait_def_id, None, &msg));
             }
         }
     }
diff --git a/src/test/compile-fail/trait-not-accessible.rs b/src/test/compile-fail/trait-not-accessible.rs
index 21668fcfeae..5feef0a24eb 100644
--- a/src/test/compile-fail/trait-not-accessible.rs
+++ b/src/test/compile-fail/trait-not-accessible.rs
@@ -20,7 +20,7 @@ struct S;
 impl m::Pub for S {}
 
 fn g<T: m::Pub>(arg: T) {
-    arg.f(); //~ ERROR: source trait is private
+    arg.f(); //~ ERROR: source trait `m::Priv` is private
 }
 
 fn main() {