about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorEric Huss <eric@huss.org>2019-12-05 14:43:53 -0800
committerEric Huss <eric@huss.org>2019-12-09 08:08:13 -0800
commit590dd7dfef3e835756edb5f920bf31cd19eef4d0 (patch)
treec7b2838dc38c2a331b2771f83289e0bcc26a08cf /src/test
parenta0312c156d8470179101ab71ef6a69c0b9a8dd0b (diff)
downloadrust-590dd7dfef3e835756edb5f920bf31cd19eef4d0.tar.gz
rust-590dd7dfef3e835756edb5f920bf31cd19eef4d0.zip
Add options to --extern flag.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/run-make-fulldeps/extern-flag-noprelude/Makefile11
-rw-r--r--src/test/run-make-fulldeps/extern-flag-noprelude/dep.rs3
-rw-r--r--src/test/run-make-fulldeps/extern-flag-noprelude/foo.rs3
-rw-r--r--src/test/ui/extern-flag/multiple-opts.rs20
-rw-r--r--src/test/ui/extern-flag/multiple-opts.stderr9
-rw-r--r--src/test/ui/extern-flag/noprelude-and-prelude.rs10
-rw-r--r--src/test/ui/extern-flag/public-and-private.rs13
-rw-r--r--src/test/ui/extern-flag/public-and-private.stderr14
8 files changed, 83 insertions, 0 deletions
diff --git a/src/test/run-make-fulldeps/extern-flag-noprelude/Makefile b/src/test/run-make-fulldeps/extern-flag-noprelude/Makefile
new file mode 100644
index 00000000000..18f9d8bab60
--- /dev/null
+++ b/src/test/run-make-fulldeps/extern-flag-noprelude/Makefile
@@ -0,0 +1,11 @@
+-include ../tools.mk
+
+# Test --extern noprelude
+
+all:
+	$(RUSTC) dep.rs --crate-name=dep --crate-type=rlib
+	$(RUSTC) foo.rs --edition=2018 -Zunstable-options \
+		--extern noprelude:dep=$(TMPDIR)/libdep.rlib 2>&1 | \
+		$(CGREP) -e 'failed to resolve.*`dep`'
+	$(RUSTC) foo.rs --edition=2018 -Zunstable-options \
+		--extern dep=$(TMPDIR)/libdep.rlib
diff --git a/src/test/run-make-fulldeps/extern-flag-noprelude/dep.rs b/src/test/run-make-fulldeps/extern-flag-noprelude/dep.rs
new file mode 100644
index 00000000000..dd2f373f849
--- /dev/null
+++ b/src/test/run-make-fulldeps/extern-flag-noprelude/dep.rs
@@ -0,0 +1,3 @@
+pub fn somefun() {}
+
+pub struct S;
diff --git a/src/test/run-make-fulldeps/extern-flag-noprelude/foo.rs b/src/test/run-make-fulldeps/extern-flag-noprelude/foo.rs
new file mode 100644
index 00000000000..9bb1b78409f
--- /dev/null
+++ b/src/test/run-make-fulldeps/extern-flag-noprelude/foo.rs
@@ -0,0 +1,3 @@
+fn main() {
+    dep::somefun();
+}
diff --git a/src/test/ui/extern-flag/multiple-opts.rs b/src/test/ui/extern-flag/multiple-opts.rs
new file mode 100644
index 00000000000..3dc2f1d73f8
--- /dev/null
+++ b/src/test/ui/extern-flag/multiple-opts.rs
@@ -0,0 +1,20 @@
+// aux-crate:priv,noprelude:somedep=somedep.rs
+// compile-flags: -Zunstable-options
+// edition:2018
+
+// Test for multiple options to --extern. Can't test for errors from both
+// options at the same time, so this only checks that noprelude is honored.
+
+#![warn(exported_private_dependencies)]
+
+// Module to avoid adding to prelude.
+pub mod m {
+    extern crate somedep;
+    pub struct PublicType {
+        pub field: somedep::S,
+    }
+}
+
+fn main() {
+    somedep::somefun();  //~ ERROR failed to resolve
+}
diff --git a/src/test/ui/extern-flag/multiple-opts.stderr b/src/test/ui/extern-flag/multiple-opts.stderr
new file mode 100644
index 00000000000..3bf73d11cfd
--- /dev/null
+++ b/src/test/ui/extern-flag/multiple-opts.stderr
@@ -0,0 +1,9 @@
+error[E0433]: failed to resolve: use of undeclared type or module `somedep`
+  --> $DIR/multiple-opts.rs:19:5
+   |
+LL |     somedep::somefun();
+   |     ^^^^^^^ use of undeclared type or module `somedep`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0433`.
diff --git a/src/test/ui/extern-flag/noprelude-and-prelude.rs b/src/test/ui/extern-flag/noprelude-and-prelude.rs
new file mode 100644
index 00000000000..e6a150b9e8b
--- /dev/null
+++ b/src/test/ui/extern-flag/noprelude-and-prelude.rs
@@ -0,0 +1,10 @@
+// check-pass
+// aux-crate:noprelude:somedep=somedep.rs
+// compile-flags: -Zunstable-options --extern somedep
+// edition:2018
+
+// Having a flag with `noprelude` and one without, will add to the prelude.
+
+fn main() {
+    somedep::somefun();
+}
diff --git a/src/test/ui/extern-flag/public-and-private.rs b/src/test/ui/extern-flag/public-and-private.rs
new file mode 100644
index 00000000000..a3a81cbf372
--- /dev/null
+++ b/src/test/ui/extern-flag/public-and-private.rs
@@ -0,0 +1,13 @@
+// aux-crate:priv:somedep=somedep.rs
+// compile-flags: -Zunstable-options --extern somedep
+// edition:2018
+
+#![deny(exported_private_dependencies)]
+
+// Having a flag with `priv` and one without, will remain private (it is sticky).
+
+pub struct PublicType {
+    pub field: somedep::S, //~ ERROR from private dependency
+}
+
+fn main() {}
diff --git a/src/test/ui/extern-flag/public-and-private.stderr b/src/test/ui/extern-flag/public-and-private.stderr
new file mode 100644
index 00000000000..72f1bb2d26f
--- /dev/null
+++ b/src/test/ui/extern-flag/public-and-private.stderr
@@ -0,0 +1,14 @@
+error: type `somedep::S` from private dependency 'somedep' in public interface
+  --> $DIR/public-and-private.rs:10:5
+   |
+LL |     pub field: somedep::S,
+   |     ^^^^^^^^^^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/public-and-private.rs:5:9
+   |
+LL | #![deny(exported_private_dependencies)]
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+