rust/tests/ui/lto/issue-105637.rs

29 lines
1.1 KiB
Rust

// Regression test for issue #105637: `-Zdylib-lto` with LTO duplicated symbols from other dylibs,
// in this case from libstd.
//
// That manifested as both `rustc_driver` and rustc's "main" (`compiler/rustc`) having their own
// `std::panicking::HOOK` static, and the hook in rustc's main (the default stdlib's) being executed
// when rustc ICEs, instead of the overridden hook from `rustc_driver` (which also displays the
// query stack and information on how to open a GH issue for the encountered ICE).
//
// In this test, we reproduce this setup by installing a panic hook in both the main and an LTOed
// dylib: the last hook set should be the one being executed, the dylib's.
//@ aux-build: thinlto-dylib.rs
//@ run-fail
//@ check-run-results
extern crate thinlto_dylib;
use std::panic;
fn main() {
// We don't want to see this panic hook executed
std::panic::set_hook(Box::new(|_| {
eprintln!("main crate panic hook");
}));
// Have the LTOed dylib install its own hook and panic, we want to see its hook executed.
thinlto_dylib::main();
}