Skip to content

Commit

Permalink
add non-regression test for issue 81408
Browse files Browse the repository at this point in the history
  • Loading branch information
lqd committed Sep 6, 2024
1 parent 538edcd commit f9fb8e9
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
13 changes: 13 additions & 0 deletions tests/run-make/msvc-lld-thinlto-imp-symbols/issue_81408.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 5 additions & 0 deletions tests/run-make/msvc-lld-thinlto-imp-symbols/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
extern crate issue_81408;

fn main() {
issue_81408::memrchr();
}
33 changes: 33 additions & 0 deletions tests/run-make/msvc-lld-thinlto-imp-symbols/rmake.rs
Original file line number Diff line number Diff line change
@@ -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");
}

0 comments on commit f9fb8e9

Please sign in to comment.