about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2017-01-09 00:21:35 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2017-01-29 02:57:14 +0300
commit18b96cf286e99ba61ff52fb916463466b2a63a67 (patch)
tree1fd7f6c5c7e9e2920a35213b5e19f5b376b3cea5 /src/test
parent1491e0425911806f2612f05ee8caf21666447128 (diff)
downloadrust-18b96cf286e99ba61ff52fb916463466b2a63a67.tar.gz
rust-18b96cf286e99ba61ff52fb916463466b2a63a67.zip
Privatize constructors of tuple structs with private fields
Diffstat (limited to 'src/test')
-rw-r--r--src/test/compile-fail/auxiliary/privacy-struct-ctor.rs21
-rw-r--r--src/test/compile-fail/privacy-struct-ctor.rs42
2 files changed, 63 insertions, 0 deletions
diff --git a/src/test/compile-fail/auxiliary/privacy-struct-ctor.rs b/src/test/compile-fail/auxiliary/privacy-struct-ctor.rs
new file mode 100644
index 00000000000..f190f5dd053
--- /dev/null
+++ b/src/test/compile-fail/auxiliary/privacy-struct-ctor.rs
@@ -0,0 +1,21 @@
+// Copyright 2016 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.
+
+#![feature(pub_restricted)]
+
+pub mod m {
+    pub struct S(u8);
+
+    pub mod n {
+        pub(m) struct Z(pub(m::n) u8);
+    }
+}
+
+pub use m::S;
diff --git a/src/test/compile-fail/privacy-struct-ctor.rs b/src/test/compile-fail/privacy-struct-ctor.rs
new file mode 100644
index 00000000000..13a04f49014
--- /dev/null
+++ b/src/test/compile-fail/privacy-struct-ctor.rs
@@ -0,0 +1,42 @@
+// Copyright 2016 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.
+
+// aux-build:privacy-struct-ctor.rs
+
+#![feature(pub_restricted)]
+
+extern crate privacy_struct_ctor as xcrate;
+
+mod m {
+    pub struct S(u8);
+
+    pub mod n {
+        pub(m) struct Z(pub(m::n) u8);
+    }
+
+    use m::n::Z; // OK, only the type is imported
+
+    fn f() {
+        n::Z; //~ ERROR tuple struct `Z` is private
+        Z; //~ ERROR expected value, found struct `Z`
+    }
+}
+
+use m::S; // OK, only the type is imported
+
+fn main() {
+    m::S; //~ ERROR tuple struct `S` is private
+    S; //~ ERROR expected value, found struct `S`
+    m::n::Z; //~ ERROR tuple struct `Z` is private
+
+    xcrate::m::S; //~ ERROR tuple struct `S` is private
+    xcrate::S; //~ ERROR expected value, found struct `xcrate::S`
+    xcrate::m::n::Z; //~ ERROR tuple struct `Z` is private
+}