Skip to content

Commit

Permalink
Fix review comments and other improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
bjorn3 committed Aug 11, 2024
1 parent d63a067 commit db68a19
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 24 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_codegen_llvm/src/back/archive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,8 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
fn new_archive_builder<'a>(&self, sess: &'a Session) -> Box<dyn ArchiveBuilder + 'a> {
// Keeping LlvmArchiveBuilder around in case of a regression caused by using
// ArArchiveBuilder.
// FIXME remove a couple of months after #128936 gets merged in case no
// regression is found.
// FIXME(#128955) remove a couple of months after #128936 gets merged in case
// no regression is found.
if false {
Box::new(LlvmArchiveBuilder { sess, additions: Vec::new() })
} else {
Expand Down
6 changes: 2 additions & 4 deletions compiler/rustc_codegen_ssa/src/back/archive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -308,10 +308,8 @@ impl<'a> ArchiveBuilder for ArArchiveBuilder<'a> {
.map_err(|err| io::Error::new(io::ErrorKind::InvalidData, err))?;
if !skip(&file_name) {
if entry.is_thin() {
self.entries.push((
file_name.clone().into_bytes(),
ArchiveEntry::File(PathBuf::from(file_name)),
));
let member_path = archive_path.parent().unwrap().join(Path::new(&file_name));
self.entries.push((file_name.into_bytes(), ArchiveEntry::File(member_path)));
} else {
self.entries.push((
file_name.into_bytes(),
Expand Down
7 changes: 1 addition & 6 deletions tests/run-make/staticlib-thin-archive/bin.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
#[link(name = "rust_archive", kind = "static")]
extern "C" {
fn simple_fn();
}

fn main() {
unsafe {
simple_fn();
rust_lib::simple_fn();
}
}
31 changes: 23 additions & 8 deletions tests/run-make/staticlib-thin-archive/rmake.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,28 @@
// Regression test for https:/rust-lang/rust/issues/107407
// Regression test for https:/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();
}
4 changes: 0 additions & 4 deletions tests/run-make/staticlib-thin-archive/rust_archive.rs

This file was deleted.

6 changes: 6 additions & 0 deletions tests/run-make/staticlib-thin-archive/rust_lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#![crate_type = "rlib"]

#[link(name = "thin_archive", kind = "static")]
extern "C" {
pub fn simple_fn();
}

0 comments on commit db68a19

Please sign in to comment.