about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/middle/typeck/collect.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs
index 8dda513106e..a9d54716cd8 100644
--- a/src/librustc/middle/typeck/collect.rs
+++ b/src/librustc/middle/typeck/collect.rs
@@ -653,13 +653,20 @@ pub fn convert_methods(ccx: &CrateCtxt,
                                   &method_generics.lifetimes,
                                   untransformed_rcvr_ty,
                                   m.self_ty, &m.decl);
+
+        // if the method specifies a visibility, use that, otherwise
+        // inherit the visibility from the impl (so `foo` in `pub impl
+        // { fn foo(); }` is public, but private in `priv impl { fn
+        // foo(); }`).
+        let method_vis = m.vis.inherit_from(rcvr_visibility);
+
         ty::method {
             ident: m.ident,
             generics: ty_generics(ccx, None, &m.generics),
             transformed_self_ty: transformed_self_ty,
             fty: fty,
             self_ty: m.self_ty.node,
-            vis: m.vis.inherit_from(rcvr_visibility),
+            vis: method_vis,
             def_id: local_def(m.id)
         }
     }