about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-07-29 15:36:52 +0000
committerbors <bors@rust-lang.org>2022-07-29 15:36:52 +0000
commit5dda74a48cd50de10539478c1e0b6699bfdab665 (patch)
treebf8e83682c2a6781857f38ad52288b8731cd64a0 /src/test
parent9fa62f2d853d9d475601c5150193901207188052 (diff)
parent7d4a98e61aef8622ab4fa0cec0810171cf17b1bf (diff)
downloadrust-5dda74a48cd50de10539478c1e0b6699bfdab665.tar.gz
rust-5dda74a48cd50de10539478c1e0b6699bfdab665.zip
Auto merge of #99467 - BelovDV:add_option_link_arg, r=petrochenkov
flag '-l link-arg=___ was added

#99427
Diffstat (limited to 'src/test')
-rw-r--r--src/test/run-make/pass-linker-flags-from-dep/Makefile10
-rw-r--r--src/test/run-make/pass-linker-flags-from-dep/main.rs3
-rw-r--r--src/test/run-make/pass-linker-flags-from-dep/native_dep_1.rs1
-rw-r--r--src/test/run-make/pass-linker-flags-from-dep/native_dep_2.rs1
-rw-r--r--src/test/run-make/pass-linker-flags-from-dep/rust_dep.rs9
-rw-r--r--src/test/run-make/pass-linker-flags/Makefile4
-rw-r--r--src/test/run-make/pass-linker-flags/rs.rs1
-rw-r--r--src/test/ui/manual/manual-link-bad-kind.rs2
-rw-r--r--src/test/ui/manual/manual-link-bad-kind.stderr2
-rw-r--r--src/test/ui/manual/manual-link-unsupported-kind.rs2
-rw-r--r--src/test/ui/manual/manual-link-unsupported-kind.stderr2
-rw-r--r--src/test/ui/native-library-link-flags/empty-kind-1.rs2
-rw-r--r--src/test/ui/native-library-link-flags/empty-kind-1.stderr2
-rw-r--r--src/test/ui/native-library-link-flags/empty-kind-2.rs2
-rw-r--r--src/test/ui/native-library-link-flags/empty-kind-2.stderr2
-rw-r--r--src/test/ui/native-library-link-flags/link-arg-error.rs4
-rw-r--r--src/test/ui/native-library-link-flags/link-arg-error.stderr2
-rw-r--r--src/test/ui/native-library-link-flags/link-arg-from-rs.rs8
-rw-r--r--src/test/ui/native-library-link-flags/link-arg-from-rs.stderr16
19 files changed, 67 insertions, 8 deletions
diff --git a/src/test/run-make/pass-linker-flags-from-dep/Makefile b/src/test/run-make/pass-linker-flags-from-dep/Makefile
new file mode 100644
index 00000000000..365216b4c35
--- /dev/null
+++ b/src/test/run-make/pass-linker-flags-from-dep/Makefile
@@ -0,0 +1,10 @@
+-include ../../run-make-fulldeps/tools.mk
+
+all:
+	# Build deps
+	$(RUSTC) native_dep_1.rs --crate-type=staticlib
+	$(RUSTC) native_dep_2.rs --crate-type=staticlib
+	$(RUSTC) rust_dep.rs -l static:-bundle=native_dep_1 -l link-arg=some_flag -l static:-bundle=native_dep_2 --crate-type=lib -Z unstable-options
+
+	# Check sequence of linker args
+	$(RUSTC) main.rs --extern lib=$(TMPDIR)/librust_dep.rlib --crate-type=bin --print link-args | $(CGREP) -e 'native_dep_1.*some_flag.*native_dep_2'
diff --git a/src/test/run-make/pass-linker-flags-from-dep/main.rs b/src/test/run-make/pass-linker-flags-from-dep/main.rs
new file mode 100644
index 00000000000..40952fb22b1
--- /dev/null
+++ b/src/test/run-make/pass-linker-flags-from-dep/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+    lib::f();
+}
diff --git a/src/test/run-make/pass-linker-flags-from-dep/native_dep_1.rs b/src/test/run-make/pass-linker-flags-from-dep/native_dep_1.rs
new file mode 100644
index 00000000000..fdb2d9ca68e
--- /dev/null
+++ b/src/test/run-make/pass-linker-flags-from-dep/native_dep_1.rs
@@ -0,0 +1 @@
+pub fn f1() {}
diff --git a/src/test/run-make/pass-linker-flags-from-dep/native_dep_2.rs b/src/test/run-make/pass-linker-flags-from-dep/native_dep_2.rs
new file mode 100644
index 00000000000..f788b771184
--- /dev/null
+++ b/src/test/run-make/pass-linker-flags-from-dep/native_dep_2.rs
@@ -0,0 +1 @@
+pub fn f2() {}
diff --git a/src/test/run-make/pass-linker-flags-from-dep/rust_dep.rs b/src/test/run-make/pass-linker-flags-from-dep/rust_dep.rs
new file mode 100644
index 00000000000..7f5df113934
--- /dev/null
+++ b/src/test/run-make/pass-linker-flags-from-dep/rust_dep.rs
@@ -0,0 +1,9 @@
+extern "C" {
+    pub fn foo();
+}
+
+pub fn f() {
+    unsafe {
+        foo();
+    }
+}
diff --git a/src/test/run-make/pass-linker-flags/Makefile b/src/test/run-make/pass-linker-flags/Makefile
new file mode 100644
index 00000000000..02b1e2179e1
--- /dev/null
+++ b/src/test/run-make/pass-linker-flags/Makefile
@@ -0,0 +1,4 @@
+-include ../../run-make-fulldeps/tools.mk
+
+all:
+	$(RUSTC) rs.rs -Z unstable-options -l static=l1 -l link-arg=a1 -l static=l2 -l link-arg=a2 -l dylib=d1 -l link-arg=a3 --print link-args | $(CGREP) -e 'l1.*a1.*l2.*a2.*d1.*a3'
diff --git a/src/test/run-make/pass-linker-flags/rs.rs b/src/test/run-make/pass-linker-flags/rs.rs
new file mode 100644
index 00000000000..f328e4d9d04
--- /dev/null
+++ b/src/test/run-make/pass-linker-flags/rs.rs
@@ -0,0 +1 @@
+fn main() {}
diff --git a/src/test/ui/manual/manual-link-bad-kind.rs b/src/test/ui/manual/manual-link-bad-kind.rs
index d1609338db6..c50a6c034b5 100644
--- a/src/test/ui/manual/manual-link-bad-kind.rs
+++ b/src/test/ui/manual/manual-link-bad-kind.rs
@@ -1,5 +1,5 @@
 // compile-flags:-l bar=foo
-// error-pattern: unknown library kind `bar`, expected one of: static, dylib, framework
+// error-pattern: unknown library kind `bar`, expected one of: static, dylib, framework, link-arg
 
 fn main() {
 }
diff --git a/src/test/ui/manual/manual-link-bad-kind.stderr b/src/test/ui/manual/manual-link-bad-kind.stderr
index 86146956699..647c4c61e02 100644
--- a/src/test/ui/manual/manual-link-bad-kind.stderr
+++ b/src/test/ui/manual/manual-link-bad-kind.stderr
@@ -1,2 +1,2 @@
-error: unknown library kind `bar`, expected one of: static, dylib, framework
+error: unknown library kind `bar`, expected one of: static, dylib, framework, link-arg
 
diff --git a/src/test/ui/manual/manual-link-unsupported-kind.rs b/src/test/ui/manual/manual-link-unsupported-kind.rs
index 7a40186d504..b8ec575a455 100644
--- a/src/test/ui/manual/manual-link-unsupported-kind.rs
+++ b/src/test/ui/manual/manual-link-unsupported-kind.rs
@@ -1,5 +1,5 @@
 // compile-flags:-l raw-dylib=foo
-// error-pattern: unknown library kind `raw-dylib`, expected one of: static, dylib, framework
+// error-pattern: unknown library kind `raw-dylib`, expected one of: static, dylib, framework, link-arg
 
 fn main() {
 }
diff --git a/src/test/ui/manual/manual-link-unsupported-kind.stderr b/src/test/ui/manual/manual-link-unsupported-kind.stderr
index 4965c0af5f2..ae4a1ec9a95 100644
--- a/src/test/ui/manual/manual-link-unsupported-kind.stderr
+++ b/src/test/ui/manual/manual-link-unsupported-kind.stderr
@@ -1,2 +1,2 @@
-error: unknown library kind `raw-dylib`, expected one of: static, dylib, framework
+error: unknown library kind `raw-dylib`, expected one of: static, dylib, framework, link-arg
 
diff --git a/src/test/ui/native-library-link-flags/empty-kind-1.rs b/src/test/ui/native-library-link-flags/empty-kind-1.rs
index 086d8cff957..18937856d20 100644
--- a/src/test/ui/native-library-link-flags/empty-kind-1.rs
+++ b/src/test/ui/native-library-link-flags/empty-kind-1.rs
@@ -1,6 +1,6 @@
 // Unspecified kind should fail with an error
 
 // compile-flags: -l =mylib
-// error-pattern: unknown library kind ``, expected one of: static, dylib, framework
+// error-pattern: unknown library kind ``, expected one of: static, dylib, framework, link-arg
 
 fn main() {}
diff --git a/src/test/ui/native-library-link-flags/empty-kind-1.stderr b/src/test/ui/native-library-link-flags/empty-kind-1.stderr
index 37846c0b06f..3e5b0549339 100644
--- a/src/test/ui/native-library-link-flags/empty-kind-1.stderr
+++ b/src/test/ui/native-library-link-flags/empty-kind-1.stderr
@@ -1,2 +1,2 @@
-error: unknown library kind ``, expected one of: static, dylib, framework
+error: unknown library kind ``, expected one of: static, dylib, framework, link-arg
 
diff --git a/src/test/ui/native-library-link-flags/empty-kind-2.rs b/src/test/ui/native-library-link-flags/empty-kind-2.rs
index 45ec8ec85e3..851eb63fcd8 100644
--- a/src/test/ui/native-library-link-flags/empty-kind-2.rs
+++ b/src/test/ui/native-library-link-flags/empty-kind-2.rs
@@ -1,6 +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
+// error-pattern: unknown library kind ``, expected one of: static, dylib, framework, link-arg
 
 fn main() {}
diff --git a/src/test/ui/native-library-link-flags/empty-kind-2.stderr b/src/test/ui/native-library-link-flags/empty-kind-2.stderr
index 37846c0b06f..3e5b0549339 100644
--- a/src/test/ui/native-library-link-flags/empty-kind-2.stderr
+++ b/src/test/ui/native-library-link-flags/empty-kind-2.stderr
@@ -1,2 +1,2 @@
-error: unknown library kind ``, expected one of: static, dylib, framework
+error: unknown library kind ``, expected one of: static, dylib, framework, link-arg
 
diff --git a/src/test/ui/native-library-link-flags/link-arg-error.rs b/src/test/ui/native-library-link-flags/link-arg-error.rs
new file mode 100644
index 00000000000..e041650d024
--- /dev/null
+++ b/src/test/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/src/test/ui/native-library-link-flags/link-arg-error.stderr b/src/test/ui/native-library-link-flags/link-arg-error.stderr
new file mode 100644
index 00000000000..e1d01e14152
--- /dev/null
+++ b/src/test/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/src/test/ui/native-library-link-flags/link-arg-from-rs.rs b/src/test/ui/native-library-link-flags/link-arg-from-rs.rs
new file mode 100644
index 00000000000..075e4d9e79e
--- /dev/null
+++ b/src/test/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/src/test/ui/native-library-link-flags/link-arg-from-rs.stderr b/src/test/ui/native-library-link-flags/link-arg-from-rs.stderr
new file mode 100644
index 00000000000..69a7825c0b1
--- /dev/null
+++ b/src/test/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`.