2024-07-23 12:02:48 -05:00
|
|
|
// `raw-dylib` is a Windows-specific attribute which emits idata sections for the items in the
|
|
|
|
// attached extern block,
|
|
|
|
// so they may be linked against without linking against an import library.
|
|
|
|
// To learn more, read https://github.com/rust-lang/rfcs/blob/master/text/2627-raw-dylib-kind.md
|
|
|
|
// This test uses this feature alongside alternative calling conventions, checking that both
|
|
|
|
// features are compatible and result in the expected output upon execution of the binary.
|
|
|
|
// See https://github.com/rust-lang/rust/pull/84171
|
|
|
|
|
|
|
|
//@ only-x86
|
|
|
|
//@ only-windows
|
|
|
|
|
|
|
|
use run_make_support::{build_native_dynamic_lib, diff, is_msvc, run, run_with_args, rustc};
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
rustc()
|
|
|
|
.crate_type("lib")
|
|
|
|
.crate_name("raw_dylib_alt_calling_convention_test")
|
|
|
|
.input("lib.rs")
|
|
|
|
.run();
|
|
|
|
rustc().crate_type("bin").input("driver.rs").run();
|
|
|
|
build_native_dynamic_lib("extern");
|
|
|
|
let out = run("driver").stdout_utf8();
|
2024-07-23 12:29:14 -05:00
|
|
|
diff().expected_file("output.txt").actual_text("actual", out).normalize(r#"\r"#, "").run();
|
2024-07-23 12:02:48 -05:00
|
|
|
if is_msvc() {
|
|
|
|
let out_msvc = run_with_args("driver", &["true"]).stdout_utf8();
|
2024-07-23 12:29:14 -05:00
|
|
|
diff()
|
|
|
|
.expected_file("output.msvc.txt")
|
|
|
|
.actual_text("actual", out_msvc)
|
|
|
|
.normalize(r#"\r"#, "")
|
|
|
|
.run();
|
2024-07-23 12:02:48 -05:00
|
|
|
}
|
|
|
|
}
|