diff --git a/src/librustc_privacy/diagnostics.rs b/src/librustc_privacy/diagnostics.rs new file mode 100644 index 00000000000..ff4163a53a1 --- /dev/null +++ b/src/librustc_privacy/diagnostics.rs @@ -0,0 +1,38 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![allow(non_snake_case)] + +register_long_diagnostics! { + +E0445: r##" +A private trait was used on a "public" type. Erroneous code example: + +``` +trait Foo { + fn dummy(&self) { } +} + +pub trait Bar : Foo {} // error: private trait in exported type parameter bound +``` + +To solve this error, please ensure the trait is accessible at the same level of +the type(s) on which it's implemented. Example: + +``` +pub trait Foo { // we set the Foo trait public + fn dummy(&self) { } +} + +pub trait Bar : Foo {} // ok! +``` +"##, + +} \ No newline at end of file diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index 7f72ccb51e6..9d0c1a560da 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -1193,8 +1193,8 @@ impl<'a, 'tcx> VisiblePrivateTypesVisitor<'a, 'tcx> { if !self.tcx.sess.features.borrow().visible_private_types && self.path_is_private_type(trait_ref.trait_ref.ref_id) { let span = trait_ref.trait_ref.path.span; - self.tcx.sess.span_err(span, "private trait in exported type \ - parameter bound"); + span_err!(self.tcx.sess, span, E0445, + "private trait in exported type parameter bound"); } } }