add non-regression test for issue 81408
This commit is contained in:
parent
b7a490ab33
commit
562c0d1299
13
tests/run-make/msvc-lld-thinlto-imp-symbols/issue_81408.rs
Normal file
13
tests/run-make/msvc-lld-thinlto-imp-symbols/issue_81408.rs
Normal file
@ -0,0 +1,13 @@
|
||||
use std::sync::atomic::{AtomicPtr, Ordering};
|
||||
|
||||
#[inline(always)]
|
||||
pub fn memrchr() {
|
||||
fn detect() {}
|
||||
|
||||
static CROSS_CRATE_STATIC_ITEM: AtomicPtr<()> = AtomicPtr::new(detect as *mut ());
|
||||
|
||||
unsafe {
|
||||
let fun = CROSS_CRATE_STATIC_ITEM.load(Ordering::SeqCst);
|
||||
std::mem::transmute::<*mut (), fn()>(fun)()
|
||||
}
|
||||
}
|
5
tests/run-make/msvc-lld-thinlto-imp-symbols/main.rs
Normal file
5
tests/run-make/msvc-lld-thinlto-imp-symbols/main.rs
Normal file
@ -0,0 +1,5 @@
|
||||
extern crate issue_81408;
|
||||
|
||||
fn main() {
|
||||
issue_81408::memrchr();
|
||||
}
|
33
tests/run-make/msvc-lld-thinlto-imp-symbols/rmake.rs
Normal file
33
tests/run-make/msvc-lld-thinlto-imp-symbols/rmake.rs
Normal file
@ -0,0 +1,33 @@
|
||||
// This is a non-regression test for issue #81408 involving an lld bug and ThinLTO, on windows.
|
||||
// MSVC's link.exe doesn't need any workarounds in rustc, but lld does, so we'll check that the
|
||||
// binary runs successfully instead of using a codegen test.
|
||||
|
||||
//@ only-x86_64-pc-windows-msvc
|
||||
//@ needs-rust-lld
|
||||
//@ ignore-cross-compile: the built binary is executed
|
||||
|
||||
use run_make_support::{run, rustc};
|
||||
|
||||
fn test_with_linker(linker: &str) {
|
||||
rustc().input("issue_81408.rs").crate_name("issue_81408").crate_type("lib").opt().run();
|
||||
rustc()
|
||||
.input("main.rs")
|
||||
.crate_type("bin")
|
||||
.arg("-Clto=thin")
|
||||
.opt()
|
||||
.arg(&format!("-Clinker={linker}"))
|
||||
.extern_("issue_81408", "libissue_81408.rlib")
|
||||
.run();
|
||||
|
||||
// To make possible failures clearer, print an intro that will only be shown if the test does
|
||||
// fail when running the binary.
|
||||
eprint!("Running binary linked with {linker}... ");
|
||||
run("main");
|
||||
eprintln!("ok");
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// We want the reproducer to work when linked with both linkers.
|
||||
test_with_linker("link");
|
||||
test_with_linker("rust-lld");
|
||||
}
|
Loading…
Reference in New Issue
Block a user