blob: 96b2742aa8e0a904ba7b7e5ef53401a27450773c [file] [log] [blame] [edit]
//@ no-prefer-dynamic
//@ aux-build: decl_with_default_panics.rs
//@ edition: 2021
//@ run-pass
//@ needs-unwind
//@ exec-env:RUST_BACKTRACE=1
//@ ignore-backends: gcc
// FIXME: linking on windows (speciifcally mingw) not yet supported, see tracking issue #125418
//@ ignore-windows
// A small test to make sure that unwinding works properly.
//
// Functions can have target-cpu applied. On apple-darwin this is super important,
// since you can have binaries which mix x86 and aarch64 code that are compatible
// with both architectures. So we can't just reject target_cpu on EIIs since apple
// puts them on by default. The problem: we generate aliases. And aliases cannot
// get target_cpu applied to them. So, instead we should, in the case of functions,
// generate a shim function. For statics aliases should keep working.
// However, to make this work properly,
// on LLVM we generate shim functions instead of function aliases.
// Little extra functions that look like
// ```
// function alias_symbol(*args) {return (tailcall) aliasee(*args);}
// ```
// This is a simple test to make sure that we can unwind through these,
// and that this wrapper function effectively doesn't show up in the trace.
extern crate decl_with_default_panics;
fn main() {
let result = std::panic::catch_unwind(|| {
decl_with_default_panics::decl1(10);
});
assert!(result.is_err());
}