about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/run-make/crate-loading-multiple-candidates/crateresolve1-1.rs6
-rw-r--r--tests/run-make/crate-loading-multiple-candidates/crateresolve1-2.rs6
-rw-r--r--tests/run-make/crate-loading-multiple-candidates/multiple-candidates.rs3
-rw-r--r--tests/run-make/crate-loading-multiple-candidates/multiple-candidates.stderr12
-rw-r--r--tests/run-make/crate-loading-multiple-candidates/rmake.rs34
5 files changed, 61 insertions, 0 deletions
diff --git a/tests/run-make/crate-loading-multiple-candidates/crateresolve1-1.rs b/tests/run-make/crate-loading-multiple-candidates/crateresolve1-1.rs
new file mode 100644
index 00000000000..fe00f041a86
--- /dev/null
+++ b/tests/run-make/crate-loading-multiple-candidates/crateresolve1-1.rs
@@ -0,0 +1,6 @@
+#![crate_name = "crateresolve1"]
+#![crate_type = "lib"]
+
+pub fn f() -> isize {
+    10
+}
diff --git a/tests/run-make/crate-loading-multiple-candidates/crateresolve1-2.rs b/tests/run-make/crate-loading-multiple-candidates/crateresolve1-2.rs
new file mode 100644
index 00000000000..0fb8591b3a5
--- /dev/null
+++ b/tests/run-make/crate-loading-multiple-candidates/crateresolve1-2.rs
@@ -0,0 +1,6 @@
+#![crate_name = "crateresolve1"]
+#![crate_type = "lib"]
+
+pub fn f() -> isize {
+    20
+}
diff --git a/tests/run-make/crate-loading-multiple-candidates/multiple-candidates.rs b/tests/run-make/crate-loading-multiple-candidates/multiple-candidates.rs
new file mode 100644
index 00000000000..27cd7ca5c20
--- /dev/null
+++ b/tests/run-make/crate-loading-multiple-candidates/multiple-candidates.rs
@@ -0,0 +1,3 @@
+extern crate crateresolve1;
+
+fn main() {}
diff --git a/tests/run-make/crate-loading-multiple-candidates/multiple-candidates.stderr b/tests/run-make/crate-loading-multiple-candidates/multiple-candidates.stderr
new file mode 100644
index 00000000000..de7fc3b0feb
--- /dev/null
+++ b/tests/run-make/crate-loading-multiple-candidates/multiple-candidates.stderr
@@ -0,0 +1,12 @@
+error[E0464]: multiple candidates for `rlib` dependency `crateresolve1` found
+  --> multiple-candidates.rs:1:1
+   |
+LL | extern crate crateresolve1;
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: candidate #1: ./mylibs/libcrateresolve1-1.rlib
+   = note: candidate #2: ./mylibs/libcrateresolve1-2.rlib
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0464`.
diff --git a/tests/run-make/crate-loading-multiple-candidates/rmake.rs b/tests/run-make/crate-loading-multiple-candidates/rmake.rs
new file mode 100644
index 00000000000..ce090850500
--- /dev/null
+++ b/tests/run-make/crate-loading-multiple-candidates/rmake.rs
@@ -0,0 +1,34 @@
+//@ needs-symlink
+//@ ignore-cross-compile
+
+// Tests that the multiple candidate dependencies diagnostic prints relative
+// paths if a relative library path was passed in.
+
+use run_make_support::{bare_rustc, diff, rfs, rustc};
+
+fn main() {
+    // Check that relative paths are preserved in the diagnostic
+    rfs::create_dir("mylibs");
+    rustc().input("crateresolve1-1.rs").out_dir("mylibs").extra_filename("-1").run();
+    rustc().input("crateresolve1-2.rs").out_dir("mylibs").extra_filename("-2").run();
+    check("./mylibs");
+
+    // Check that symlinks aren't followed when printing the diagnostic
+    rfs::rename("mylibs", "original");
+    rfs::symlink_dir("original", "mylibs");
+    check("./mylibs");
+}
+
+fn check(library_path: &str) {
+    let out = rustc()
+        .input("multiple-candidates.rs")
+        .library_search_path(library_path)
+        .ui_testing()
+        .run_fail()
+        .stderr_utf8();
+    diff()
+        .expected_file("multiple-candidates.stderr")
+        .normalize(r"\\", "/")
+        .actual_text("(rustc)", &out)
+        .run();
+}