about summary refs log tree commit diff
path: root/tests/run-make/staticlib-thin-archive
diff options
context:
space:
mode:
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>2024-08-11 10:29:32 +0000
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>2024-08-11 10:29:32 +0000
commitdb68a19b619ffc4b4ee9d1118d064d184d0bcd37 (patch)
treebc43d3538584743929cf6b8c6e03b6f1a6df7704 /tests/run-make/staticlib-thin-archive
parentd63a067bfd9d0674e637fbfc83e0cbd526fb92b5 (diff)
Fix review comments and other improvements
Diffstat (limited to 'tests/run-make/staticlib-thin-archive')
-rw-r--r--tests/run-make/staticlib-thin-archive/bin.rs7
-rw-r--r--tests/run-make/staticlib-thin-archive/rmake.rs31
-rw-r--r--tests/run-make/staticlib-thin-archive/rust_archive.rs4
-rw-r--r--tests/run-make/staticlib-thin-archive/rust_lib.rs6
4 files changed, 30 insertions, 18 deletions
diff --git a/tests/run-make/staticlib-thin-archive/bin.rs b/tests/run-make/staticlib-thin-archive/bin.rs
index b37107d9c94..97a2751f20b 100644
--- a/tests/run-make/staticlib-thin-archive/bin.rs
+++ b/tests/run-make/staticlib-thin-archive/bin.rs
@@ -1,10 +1,5 @@
-#[link(name = "rust_archive", kind = "static")]
-extern "C" {
-    fn simple_fn();
-}
-
 fn main() {
     unsafe {
-        simple_fn();
+        rust_lib::simple_fn();
     }
 }
diff --git a/tests/run-make/staticlib-thin-archive/rmake.rs b/tests/run-make/staticlib-thin-archive/rmake.rs
index 137dffcc33f..f7e3e43d535 100644
--- a/tests/run-make/staticlib-thin-archive/rmake.rs
+++ b/tests/run-make/staticlib-thin-archive/rmake.rs
@@ -1,13 +1,28 @@
-// Regression test for https://github.com/rust-lang/rust/issues/107407
+// Regression test for https://github.com/rust-lang/rust/issues/107407 which
+// checks that rustc can read thin archive. Before the object crate added thin
+// archive support rustc would add emit object files to the staticlib and after
+// the object crate added thin archive support it would previously crash the
+// compiler due to a missing special case for thin archive members.
+use std::path::Path;
 
-use run_make_support::{llvm_ar, rustc, static_lib_name};
+use run_make_support::{llvm_ar, rust_lib_name, rustc, static_lib_name};
 
 fn main() {
-    rustc().input("simple_obj.rs").emit("obj").run();
-    llvm_ar().obj_to_thin_ar().output_input(static_lib_name("thin_archive"), "simple_obj.o").run();
-    rustc().input("rust_archive.rs").run();
-    // Disable lld as it ignores the symbol table in the archive file.
-    rustc()
-        .input("bin.rs") /*.arg("-Zlinker-features=-lld")*/
+    std::fs::create_dir("archive").unwrap();
+
+    // Build a thin archive
+    rustc().input("simple_obj.rs").emit("obj").output("archive/simple_obj.o").run();
+    llvm_ar()
+        .obj_to_thin_ar()
+        .output_input(
+            Path::new("archive").join(static_lib_name("thin_archive")),
+            "archive/simple_obj.o",
+        )
         .run();
+
+    // Build an rlib which includes the members of this thin archive
+    rustc().input("rust_lib.rs").library_search_path("archive").run();
+
+    // Build a binary which requires a symbol from the thin archive
+    rustc().input("bin.rs").extern_("rust_lib", rust_lib_name("rust_lib")).run();
 }
diff --git a/tests/run-make/staticlib-thin-archive/rust_archive.rs b/tests/run-make/staticlib-thin-archive/rust_archive.rs
deleted file mode 100644
index 3d11f02df20..00000000000
--- a/tests/run-make/staticlib-thin-archive/rust_archive.rs
+++ /dev/null
@@ -1,4 +0,0 @@
-#![crate_type = "staticlib"]
-
-#[link(name = "thin_archive", kind = "static")]
-extern "C" {}
diff --git a/tests/run-make/staticlib-thin-archive/rust_lib.rs b/tests/run-make/staticlib-thin-archive/rust_lib.rs
new file mode 100644
index 00000000000..c76b0f25433
--- /dev/null
+++ b/tests/run-make/staticlib-thin-archive/rust_lib.rs
@@ -0,0 +1,6 @@
+#![crate_type = "rlib"]
+
+#[link(name = "thin_archive", kind = "static")]
+extern "C" {
+    pub fn simple_fn();
+}