blob: aa130b0855b7328deb59dc5c9af56cd250681b8a [file] [log] [blame]
// The unstable flag `-Z export-executable-symbols` exports symbols from executables, as if
// they were dynamic libraries. This test is a simple smoke test to check that this feature
// works by using it in compilation, then checking that the output binary contains the exported
// symbol.
// See https://github.com/rust-lang/rust/pull/85673
//@ ignore-wasm
//@ ignore-cross-compile
use run_make_support::object::Object;
use run_make_support::{bin_name, is_darwin, object, rustc};
fn main() {
rustc()
.arg("-Ctarget-feature=-crt-static")
.arg("-Zexport-executable-symbols")
.input("main.rs")
.crate_type("bin")
.run();
let name: &[u8] = if is_darwin() { b"_exported_symbol" } else { b"exported_symbol" };
let contents = std::fs::read(bin_name("main")).unwrap();
let object = object::File::parse(contents.as_slice()).unwrap();
let found = object.exports().unwrap().iter().any(|x| x.name() == name);
assert!(found);
}