summaryrefslogtreecommitdiffstats
path: root/src/test/ui/privacy/pub-priv-dep
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/privacy/pub-priv-dep')
-rw-r--r--src/test/ui/privacy/pub-priv-dep/auxiliary/priv_dep.rs2
-rw-r--r--src/test/ui/privacy/pub-priv-dep/auxiliary/pub_dep.rs1
-rw-r--r--src/test/ui/privacy/pub-priv-dep/pub-priv1.rs44
-rw-r--r--src/test/ui/privacy/pub-priv-dep/pub-priv1.stderr26
-rw-r--r--src/test/ui/privacy/pub-priv-dep/std-pub.rs12
5 files changed, 85 insertions, 0 deletions
diff --git a/src/test/ui/privacy/pub-priv-dep/auxiliary/priv_dep.rs b/src/test/ui/privacy/pub-priv-dep/auxiliary/priv_dep.rs
new file mode 100644
index 000000000..e7afeb84f
--- /dev/null
+++ b/src/test/ui/privacy/pub-priv-dep/auxiliary/priv_dep.rs
@@ -0,0 +1,2 @@
+pub struct OtherType;
+pub trait OtherTrait {}
diff --git a/src/test/ui/privacy/pub-priv-dep/auxiliary/pub_dep.rs b/src/test/ui/privacy/pub-priv-dep/auxiliary/pub_dep.rs
new file mode 100644
index 000000000..3ebafd953
--- /dev/null
+++ b/src/test/ui/privacy/pub-priv-dep/auxiliary/pub_dep.rs
@@ -0,0 +1 @@
+pub struct PubType;
diff --git a/src/test/ui/privacy/pub-priv-dep/pub-priv1.rs b/src/test/ui/privacy/pub-priv-dep/pub-priv1.rs
new file mode 100644
index 000000000..ec8666f93
--- /dev/null
+++ b/src/test/ui/privacy/pub-priv-dep/pub-priv1.rs
@@ -0,0 +1,44 @@
+// aux-crate:priv:priv_dep=priv_dep.rs
+// aux-build:pub_dep.rs
+// compile-flags: -Zunstable-options
+#![deny(exported_private_dependencies)]
+
+// This crate is a private dependency
+extern crate priv_dep;
+// This crate is a public dependency
+extern crate pub_dep;
+
+use priv_dep::{OtherTrait, OtherType};
+use pub_dep::PubType;
+
+// Type from private dependency used in private
+// type - this is fine
+struct PrivateType {
+ field: OtherType,
+}
+
+pub struct PublicType {
+ pub field: OtherType,
+ //~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
+ priv_field: OtherType, // Private field - this is fine
+ pub other_field: PubType, // Type from public dependency - this is fine
+}
+
+impl PublicType {
+ pub fn pub_fn(param: OtherType) {}
+ //~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
+
+ fn priv_fn(param: OtherType) {}
+}
+
+pub trait MyPubTrait {
+ type Foo: OtherTrait;
+}
+//~^^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface
+
+pub struct AllowedPrivType {
+ #[allow(exported_private_dependencies)]
+ pub allowed: OtherType,
+}
+
+fn main() {}
diff --git a/src/test/ui/privacy/pub-priv-dep/pub-priv1.stderr b/src/test/ui/privacy/pub-priv-dep/pub-priv1.stderr
new file mode 100644
index 000000000..e62a440d8
--- /dev/null
+++ b/src/test/ui/privacy/pub-priv-dep/pub-priv1.stderr
@@ -0,0 +1,26 @@
+error: type `OtherType` from private dependency 'priv_dep' in public interface
+ --> $DIR/pub-priv1.rs:21:5
+ |
+LL | pub field: OtherType,
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+note: the lint level is defined here
+ --> $DIR/pub-priv1.rs:4:9
+ |
+LL | #![deny(exported_private_dependencies)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: type `OtherType` from private dependency 'priv_dep' in public interface
+ --> $DIR/pub-priv1.rs:28:5
+ |
+LL | pub fn pub_fn(param: OtherType) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: trait `OtherTrait` from private dependency 'priv_dep' in public interface
+ --> $DIR/pub-priv1.rs:35:5
+ |
+LL | type Foo: OtherTrait;
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/privacy/pub-priv-dep/std-pub.rs b/src/test/ui/privacy/pub-priv-dep/std-pub.rs
new file mode 100644
index 000000000..e25aa93a0
--- /dev/null
+++ b/src/test/ui/privacy/pub-priv-dep/std-pub.rs
@@ -0,0 +1,12 @@
+// The 'std' crates should always be implicitly public,
+// without having to pass any compiler arguments
+
+// run-pass
+
+#![deny(exported_private_dependencies)]
+
+pub struct PublicType {
+ pub field: Option<u8>
+}
+
+fn main() {}