diff --git a/tests/run-make/wasm-compiler-builtins-object-arch/rmake.rs b/tests/run-make/wasm-compiler-builtins-object-arch/rmake.rs new file mode 100644 index 0000000000000..c31ba3829e42c --- /dev/null +++ b/tests/run-make/wasm-compiler-builtins-object-arch/rmake.rs @@ -0,0 +1,43 @@ +//@ only-wasm32-wasip1 + +use run_make_support::object::read::archive::ArchiveFile; +use run_make_support::{has_extension, has_prefix, rfs, rustc, shallow_find_files}; + +fn main() { + let libdir = rustc().print("target-libdir").run().stdout_utf8(); + let libdir = libdir.trim(); + + let rlibs = shallow_find_files(libdir, |path| { + has_prefix(path, "libcompiler_builtins") && has_extension(path, "rlib") + }); + assert!(!rlibs.is_empty(), "no libcompiler_builtins rlib found in {libdir}"); + + let data = rfs::read(&rlibs[0]); + let archive = ArchiveFile::parse(&*data).unwrap(); + + let mut checked = 0usize; + for member in archive.members() { + let member = member.unwrap(); + let name = std::str::from_utf8(member.name()).unwrap_or(""); + if !name.ends_with(".o") { + continue; + } + let obj_data = member.data(&*data).unwrap(); + assert!( + obj_data.starts_with(b"\0asm"), + "object file `{name}` in compiler_builtins rlib is not a wasm binary \ + (first bytes: {:02x?}); C compiler-rt fallbacks were built with the wrong \ + toolchain — see rust-lang/rust#132802", + &obj_data[..4.min(obj_data.len())] + ); + checked += 1; + } + + assert!( + checked > 0, + "no .o members found in compiler_builtins rlib — \ + C objects were expected on this configuration; \ + test may be running without compiler-builtins-c enabled" + ); + eprintln!("checked {checked} .o member(s) in compiler_builtins rlib — all wasm"); +}