// 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(); }