about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-06-03 20:31:11 +0000
committerbors <bors@rust-lang.org>2017-06-03 20:31:11 +0000
commit6684d176c78647c467870c75e276f5d37ffd3e3c (patch)
tree8b629fce00b9787cd6e29bc8e4d2ba16ae455817
parent0453cf520d4176140fc199d811e54538600daa4f (diff)
parent6675bb3e732b5dccc250419755acb35cf7f8155c (diff)
downloadrust-6684d176c78647c467870c75e276f5d37ffd3e3c.tar.gz
rust-6684d176c78647c467870c75e276f5d37ffd3e3c.zip
Auto merge of #42387 - GuillaumeGomez:error-codes-next, r=Susurrus
Add E0603 error code

Part of #42229.

cc @Susurrus
-rw-r--r--src/librustc_resolve/diagnostics.rs29
-rw-r--r--src/librustc_resolve/lib.rs2
-rw-r--r--src/test/compile-fail/E0603.rs17
-rw-r--r--src/test/ui/resolve/privacy-struct-ctor.stderr10
4 files changed, 52 insertions, 6 deletions
diff --git a/src/librustc_resolve/diagnostics.rs b/src/librustc_resolve/diagnostics.rs
index fa6ea9dba43..1a5cf89f969 100644
--- a/src/librustc_resolve/diagnostics.rs
+++ b/src/librustc_resolve/diagnostics.rs
@@ -1578,6 +1578,35 @@ fn print_on_failure(state: &State) {
 ```
 "##,
 
+E0603: r##"
+A private item was used outside its scope.
+
+Erroneous code example:
+
+```compile_fail,E0603
+mod SomeModule {
+    const PRIVATE: u32 = 0x_a_bad_1dea_u32; // This const is private, so we
+                                            // can't use it outside of the
+                                            // `SomeModule` module.
+}
+
+println!("const value: {}", SomeModule::PRIVATE); // error: constant `CONSTANT`
+                                                  //        is private
+```
+
+In order to fix this error, you need to make the item public by using the `pub`
+keyword. Example:
+
+```
+mod SomeModule {
+    pub const PRIVATE: u32 = 0x_a_bad_1dea_u32; // We set it public by using the
+                                                // `pub` keyword.
+}
+
+println!("const value: {}", SomeModule::PRIVATE); // ok!
+```
+"##,
+
 }
 
 register_diagnostics! {
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index be304b8f296..b77d5a2f71f 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -3428,7 +3428,7 @@ impl<'a> Resolver<'a> {
 
         for &PrivacyError(span, name, binding) in &self.privacy_errors {
             if !reported_spans.insert(span) { continue }
-            self.session.span_err(span, &format!("{} `{}` is private", binding.descr(), name));
+            span_err!(self.session, span, E0603, "{} `{}` is private", binding.descr(), name);
         }
     }
 
diff --git a/src/test/compile-fail/E0603.rs b/src/test/compile-fail/E0603.rs
new file mode 100644
index 00000000000..1cc9f6bfa7d
--- /dev/null
+++ b/src/test/compile-fail/E0603.rs
@@ -0,0 +1,17 @@
+// Copyright 2017 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+mod SomeModule {
+    const PRIVATE: u32 = 0x_a_bad_1dea_u32;
+}
+
+fn main() {
+    SomeModule::PRIVATE; //~ ERROR E0603
+}
diff --git a/src/test/ui/resolve/privacy-struct-ctor.stderr b/src/test/ui/resolve/privacy-struct-ctor.stderr
index b21b10c63b0..a1ec5f0b713 100644
--- a/src/test/ui/resolve/privacy-struct-ctor.stderr
+++ b/src/test/ui/resolve/privacy-struct-ctor.stderr
@@ -35,31 +35,31 @@ error[E0423]: expected value, found struct `xcrate::S`
 help: possible better candidate is found in another module, you can import it into scope
    | use m::S;
 
-error: tuple struct `Z` is private
+error[E0603]: tuple struct `Z` is private
   --> $DIR/privacy-struct-ctor.rs:25:9
    |
 25 |         n::Z; //~ ERROR tuple struct `Z` is private
    |         ^^^^
 
-error: tuple struct `S` is private
+error[E0603]: tuple struct `S` is private
   --> $DIR/privacy-struct-ctor.rs:35:5
    |
 35 |     m::S; //~ ERROR tuple struct `S` is private
    |     ^^^^
 
-error: tuple struct `Z` is private
+error[E0603]: tuple struct `Z` is private
   --> $DIR/privacy-struct-ctor.rs:39:5
    |
 39 |     m::n::Z; //~ ERROR tuple struct `Z` is private
    |     ^^^^^^^
 
-error: tuple struct `S` is private
+error[E0603]: tuple struct `S` is private
   --> $DIR/privacy-struct-ctor.rs:41:5
    |
 41 |     xcrate::m::S; //~ ERROR tuple struct `S` is private
    |     ^^^^^^^^^^^^
 
-error: tuple struct `Z` is private
+error[E0603]: tuple struct `Z` is private
   --> $DIR/privacy-struct-ctor.rs:45:5
    |
 45 |     xcrate::m::n::Z; //~ ERROR tuple struct `Z` is private