about summary refs log tree commit diff
path: root/tests/ui/native-library-link-flags
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/native-library-link-flags')
-rw-r--r--tests/ui/native-library-link-flags/empty-kind-1.rs6
-rw-r--r--tests/ui/native-library-link-flags/empty-kind-1.stderr2
-rw-r--r--tests/ui/native-library-link-flags/empty-kind-2.rs6
-rw-r--r--tests/ui/native-library-link-flags/empty-kind-2.stderr2
-rw-r--r--tests/ui/native-library-link-flags/link-arg-error.rs4
-rw-r--r--tests/ui/native-library-link-flags/link-arg-error.stderr2
-rw-r--r--tests/ui/native-library-link-flags/link-arg-from-rs.rs8
-rw-r--r--tests/ui/native-library-link-flags/link-arg-from-rs.stderr16
-rw-r--r--tests/ui/native-library-link-flags/mix-bundle-and-whole-archive-link-attr.rs8
-rw-r--r--tests/ui/native-library-link-flags/mix-bundle-and-whole-archive-link-attr.stderr6
-rw-r--r--tests/ui/native-library-link-flags/mix-bundle-and-whole-archive.rs7
-rw-r--r--tests/ui/native-library-link-flags/mix-bundle-and-whole-archive.stderr6
-rw-r--r--tests/ui/native-library-link-flags/modifiers-override-2.rs3
-rw-r--r--tests/ui/native-library-link-flags/modifiers-override-2.stderr2
-rw-r--r--tests/ui/native-library-link-flags/modifiers-override-3.rs7
-rw-r--r--tests/ui/native-library-link-flags/modifiers-override-3.stderr4
-rw-r--r--tests/ui/native-library-link-flags/modifiers-override.rs16
-rw-r--r--tests/ui/native-library-link-flags/modifiers-override.stderr26
-rw-r--r--tests/ui/native-library-link-flags/suggest-libname-only-1.rs9
-rw-r--r--tests/ui/native-library-link-flags/suggest-libname-only-1.stderr6
-rw-r--r--tests/ui/native-library-link-flags/suggest-libname-only-2.rs9
-rw-r--r--tests/ui/native-library-link-flags/suggest-libname-only-2.stderr6
22 files changed, 161 insertions, 0 deletions
diff --git a/tests/ui/native-library-link-flags/empty-kind-1.rs b/tests/ui/native-library-link-flags/empty-kind-1.rs
new file mode 100644
index 00000000000..18937856d20
--- /dev/null
+++ b/tests/ui/native-library-link-flags/empty-kind-1.rs
@@ -0,0 +1,6 @@
+// Unspecified kind should fail with an error
+
+// compile-flags: -l =mylib
+// error-pattern: unknown library kind ``, expected one of: static, dylib, framework, link-arg
+
+fn main() {}
diff --git a/tests/ui/native-library-link-flags/empty-kind-1.stderr b/tests/ui/native-library-link-flags/empty-kind-1.stderr
new file mode 100644
index 00000000000..3e5b0549339
--- /dev/null
+++ b/tests/ui/native-library-link-flags/empty-kind-1.stderr
@@ -0,0 +1,2 @@
+error: unknown library kind ``, expected one of: static, dylib, framework, link-arg
+
diff --git a/tests/ui/native-library-link-flags/empty-kind-2.rs b/tests/ui/native-library-link-flags/empty-kind-2.rs
new file mode 100644
index 00000000000..851eb63fcd8
--- /dev/null
+++ b/tests/ui/native-library-link-flags/empty-kind-2.rs
@@ -0,0 +1,6 @@
+// Unspecified kind should fail with an error
+
+// compile-flags: -l :+bundle=mylib
+// error-pattern: unknown library kind ``, expected one of: static, dylib, framework, link-arg
+
+fn main() {}
diff --git a/tests/ui/native-library-link-flags/empty-kind-2.stderr b/tests/ui/native-library-link-flags/empty-kind-2.stderr
new file mode 100644
index 00000000000..3e5b0549339
--- /dev/null
+++ b/tests/ui/native-library-link-flags/empty-kind-2.stderr
@@ -0,0 +1,2 @@
+error: unknown library kind ``, expected one of: static, dylib, framework, link-arg
+
diff --git a/tests/ui/native-library-link-flags/link-arg-error.rs b/tests/ui/native-library-link-flags/link-arg-error.rs
new file mode 100644
index 00000000000..e041650d024
--- /dev/null
+++ b/tests/ui/native-library-link-flags/link-arg-error.rs
@@ -0,0 +1,4 @@
+// compile-flags: -l link-arg:+bundle=arg -Z unstable-options
+// error-pattern: linking modifier `bundle` is only compatible with `static` linking kind
+
+fn main() {}
diff --git a/tests/ui/native-library-link-flags/link-arg-error.stderr b/tests/ui/native-library-link-flags/link-arg-error.stderr
new file mode 100644
index 00000000000..e1d01e14152
--- /dev/null
+++ b/tests/ui/native-library-link-flags/link-arg-error.stderr
@@ -0,0 +1,2 @@
+error: linking modifier `bundle` is only compatible with `static` linking kind
+
diff --git a/tests/ui/native-library-link-flags/link-arg-from-rs.rs b/tests/ui/native-library-link-flags/link-arg-from-rs.rs
new file mode 100644
index 00000000000..075e4d9e79e
--- /dev/null
+++ b/tests/ui/native-library-link-flags/link-arg-from-rs.rs
@@ -0,0 +1,8 @@
+// link-arg is not supposed to be usable in #[link] attributes
+
+// compile-flags:
+// error-pattern: error[E0458]: unknown link kind `link-arg`, expected one of: static, dylib, framework, raw-dylib
+
+#[link(kind = "link-arg")]
+extern "C" {}
+pub fn main() {}
diff --git a/tests/ui/native-library-link-flags/link-arg-from-rs.stderr b/tests/ui/native-library-link-flags/link-arg-from-rs.stderr
new file mode 100644
index 00000000000..69a7825c0b1
--- /dev/null
+++ b/tests/ui/native-library-link-flags/link-arg-from-rs.stderr
@@ -0,0 +1,16 @@
+error[E0458]: unknown link kind `link-arg`, expected one of: static, dylib, framework, raw-dylib
+  --> $DIR/link-arg-from-rs.rs:6:15
+   |
+LL | #[link(kind = "link-arg")]
+   |               ^^^^^^^^^^ unknown link kind
+
+error[E0459]: `#[link]` attribute requires a `name = "string"` argument
+  --> $DIR/link-arg-from-rs.rs:6:1
+   |
+LL | #[link(kind = "link-arg")]
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `name` argument
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0458, E0459.
+For more information about an error, try `rustc --explain E0458`.
diff --git a/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive-link-attr.rs b/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive-link-attr.rs
new file mode 100644
index 00000000000..066048795c8
--- /dev/null
+++ b/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive-link-attr.rs
@@ -0,0 +1,8 @@
+// compile-flags: -Zunstable-options --crate-type rlib
+// build-fail
+// error-pattern: the linking modifiers `+bundle` and `+whole-archive` are not compatible with each other when generating rlibs
+
+#[link(name = "mylib", kind = "static", modifiers = "+bundle,+whole-archive")]
+extern "C" { }
+
+fn main() { }
diff --git a/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive-link-attr.stderr b/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive-link-attr.stderr
new file mode 100644
index 00000000000..246efb8d627
--- /dev/null
+++ b/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive-link-attr.stderr
@@ -0,0 +1,6 @@
+error: the linking modifiers `+bundle` and `+whole-archive` are not compatible with each other when generating rlibs
+
+error: could not find native static library `mylib`, perhaps an -L flag is missing?
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive.rs b/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive.rs
new file mode 100644
index 00000000000..1d0768d99cf
--- /dev/null
+++ b/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive.rs
@@ -0,0 +1,7 @@
+// Mixing +bundle and +whole-archive is not allowed
+
+// compile-flags: -l static:+bundle,+whole-archive=mylib -Zunstable-options --crate-type rlib
+// build-fail
+// error-pattern: the linking modifiers `+bundle` and `+whole-archive` are not compatible with each other when generating rlibs
+
+fn main() { }
diff --git a/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive.stderr b/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive.stderr
new file mode 100644
index 00000000000..246efb8d627
--- /dev/null
+++ b/tests/ui/native-library-link-flags/mix-bundle-and-whole-archive.stderr
@@ -0,0 +1,6 @@
+error: the linking modifiers `+bundle` and `+whole-archive` are not compatible with each other when generating rlibs
+
+error: could not find native static library `mylib`, perhaps an -L flag is missing?
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/native-library-link-flags/modifiers-override-2.rs b/tests/ui/native-library-link-flags/modifiers-override-2.rs
new file mode 100644
index 00000000000..333f6786b0f
--- /dev/null
+++ b/tests/ui/native-library-link-flags/modifiers-override-2.rs
@@ -0,0 +1,3 @@
+// compile-flags:-lstatic:+whole-archive,-whole-archive=foo
+
+fn main() {}
diff --git a/tests/ui/native-library-link-flags/modifiers-override-2.stderr b/tests/ui/native-library-link-flags/modifiers-override-2.stderr
new file mode 100644
index 00000000000..aa5b59c5b6f
--- /dev/null
+++ b/tests/ui/native-library-link-flags/modifiers-override-2.stderr
@@ -0,0 +1,2 @@
+error: multiple `whole-archive` modifiers in a single `-l` option
+
diff --git a/tests/ui/native-library-link-flags/modifiers-override-3.rs b/tests/ui/native-library-link-flags/modifiers-override-3.rs
new file mode 100644
index 00000000000..b28c53c6b0a
--- /dev/null
+++ b/tests/ui/native-library-link-flags/modifiers-override-3.rs
@@ -0,0 +1,7 @@
+// Regression test for issue #97299, one command line library with modifiers
+// overrides another command line library with modifiers.
+
+// compile-flags:-lstatic:+whole-archive=foo -lstatic:+whole-archive=foo
+// error-pattern: overriding linking modifiers from command line is not supported
+
+fn main() {}
diff --git a/tests/ui/native-library-link-flags/modifiers-override-3.stderr b/tests/ui/native-library-link-flags/modifiers-override-3.stderr
new file mode 100644
index 00000000000..365e5618100
--- /dev/null
+++ b/tests/ui/native-library-link-flags/modifiers-override-3.stderr
@@ -0,0 +1,4 @@
+error: overriding linking modifiers from command line is not supported
+
+error: aborting due to previous error
+
diff --git a/tests/ui/native-library-link-flags/modifiers-override.rs b/tests/ui/native-library-link-flags/modifiers-override.rs
new file mode 100644
index 00000000000..42cdb5004ad
--- /dev/null
+++ b/tests/ui/native-library-link-flags/modifiers-override.rs
@@ -0,0 +1,16 @@
+// compile-flags:-ldylib:+as-needed=foo -lstatic=bar -Zunstable-options
+
+#[link(name = "foo")]
+#[link(
+    name = "bar",
+    kind = "static",
+    modifiers = "+whole-archive,-whole-archive",
+    //~^ ERROR multiple `whole-archive` modifiers in a single `modifiers` argument
+    modifiers = "+bundle"
+    //~^ ERROR multiple `modifiers` arguments in a single `#[link]` attribute
+)]
+extern "C" {}
+//~^ ERROR overriding linking modifiers from command line is not supported
+//~| ERROR overriding linking modifiers from command line is not supported
+
+fn main() {}
diff --git a/tests/ui/native-library-link-flags/modifiers-override.stderr b/tests/ui/native-library-link-flags/modifiers-override.stderr
new file mode 100644
index 00000000000..eb3ab55c310
--- /dev/null
+++ b/tests/ui/native-library-link-flags/modifiers-override.stderr
@@ -0,0 +1,26 @@
+error: multiple `modifiers` arguments in a single `#[link]` attribute
+  --> $DIR/modifiers-override.rs:9:5
+   |
+LL |     modifiers = "+bundle"
+   |     ^^^^^^^^^^^^^^^^^^^^^
+
+error: multiple `whole-archive` modifiers in a single `modifiers` argument
+  --> $DIR/modifiers-override.rs:7:17
+   |
+LL |     modifiers = "+whole-archive,-whole-archive",
+   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: overriding linking modifiers from command line is not supported
+  --> $DIR/modifiers-override.rs:12:1
+   |
+LL | extern "C" {}
+   | ^^^^^^^^^^^^^
+
+error: overriding linking modifiers from command line is not supported
+  --> $DIR/modifiers-override.rs:12:1
+   |
+LL | extern "C" {}
+   | ^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/native-library-link-flags/suggest-libname-only-1.rs b/tests/ui/native-library-link-flags/suggest-libname-only-1.rs
new file mode 100644
index 00000000000..abf988a7c1e
--- /dev/null
+++ b/tests/ui/native-library-link-flags/suggest-libname-only-1.rs
@@ -0,0 +1,9 @@
+// build-fail
+// compile-flags: --crate-type rlib
+// error-pattern: could not find native static library `libfoo.a`
+// error-pattern: only provide the library name `foo`, not the full filename
+
+#[link(name = "libfoo.a", kind = "static")]
+extern { }
+
+pub fn main() { }
diff --git a/tests/ui/native-library-link-flags/suggest-libname-only-1.stderr b/tests/ui/native-library-link-flags/suggest-libname-only-1.stderr
new file mode 100644
index 00000000000..64d0a9077ed
--- /dev/null
+++ b/tests/ui/native-library-link-flags/suggest-libname-only-1.stderr
@@ -0,0 +1,6 @@
+error: could not find native static library `libfoo.a`, perhaps an -L flag is missing?
+   |
+   = help: only provide the library name `foo`, not the full filename
+
+error: aborting due to previous error
+
diff --git a/tests/ui/native-library-link-flags/suggest-libname-only-2.rs b/tests/ui/native-library-link-flags/suggest-libname-only-2.rs
new file mode 100644
index 00000000000..dfa70e56db7
--- /dev/null
+++ b/tests/ui/native-library-link-flags/suggest-libname-only-2.rs
@@ -0,0 +1,9 @@
+// build-fail
+// compile-flags: --crate-type rlib
+// error-pattern: could not find native static library `bar.lib`
+// error-pattern: only provide the library name `bar`, not the full filename
+
+#[link(name = "bar.lib", kind = "static")]
+extern { }
+
+pub fn main() { }
diff --git a/tests/ui/native-library-link-flags/suggest-libname-only-2.stderr b/tests/ui/native-library-link-flags/suggest-libname-only-2.stderr
new file mode 100644
index 00000000000..e166af9ed8f
--- /dev/null
+++ b/tests/ui/native-library-link-flags/suggest-libname-only-2.stderr
@@ -0,0 +1,6 @@
+error: could not find native static library `bar.lib`, perhaps an -L flag is missing?
+   |
+   = help: only provide the library name `bar`, not the full filename
+
+error: aborting due to previous error
+