Skip to content

Commit c4a3936

Browse files
Add error code for privacy error on exported signature
1 parent 5e9bfcd commit c4a3936

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/librustc_privacy/diagnostics.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,31 @@ pub trait Bar : Foo {} // ok!
3535
```
3636
"##,
3737

38+
E0446: r##"
39+
A private type was used in an exported type signature. Erroneous code example:
40+
41+
```
42+
mod Foo {
43+
struct Bar(u32);
44+
45+
pub fn bar() -> Bar { // error: private type in exported type signature
46+
Bar(0)
47+
}
48+
}
49+
```
50+
51+
To solve this error, please ensure the type is accessible at the same level of
52+
the exported type signature. Example:
53+
54+
```
55+
mod Foo {
56+
pub struct Bar(u32); // we set the Bar type public
57+
58+
pub fn bar() -> Bar { // ok!
59+
Bar(0)
60+
}
61+
}
62+
```
63+
"##,
64+
3865
}

src/librustc_privacy/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1435,7 +1435,8 @@ impl<'a, 'tcx, 'v> Visitor<'v> for VisiblePrivateTypesVisitor<'a, 'tcx> {
14351435
if let hir::TyPath(_, ref p) = t.node {
14361436
if !self.tcx.sess.features.borrow().visible_private_types &&
14371437
self.path_is_private_type(t.id) {
1438-
self.tcx.sess.span_err(p.span, "private type in exported type signature");
1438+
span_err!(self.tcx.sess, p.span, E0446,
1439+
"private type in exported type signature");
14391440
}
14401441
}
14411442
visit::walk_ty(self, t)

0 commit comments

Comments
 (0)