]> git.lizzy.rs Git - rust.git/blob - tests/codegen/unwind-abis/c-unwind-abi-panic-abort.rs
Move /src/test to /tests
[rust.git] / tests / codegen / unwind-abis / c-unwind-abi-panic-abort.rs
1 // compile-flags: -C panic=abort
2
3 // Test that `nounwind` attributes are also applied to extern `C-unwind` Rust functions
4 // when the code is compiled with `panic=abort`.
5
6 #![crate_type = "lib"]
7 #![feature(c_unwind)]
8
9 // CHECK: @rust_item_that_can_unwind() unnamed_addr [[ATTR0:#[0-9]+]]
10 #[no_mangle]
11 pub unsafe extern "C-unwind" fn rust_item_that_can_unwind() {
12     // Handle both legacy and v0 symbol mangling.
13     // CHECK: call void @{{.*core9panicking19panic_cannot_unwind}}
14     may_unwind();
15 }
16
17 extern "C-unwind" {
18     // CHECK: @may_unwind() unnamed_addr [[ATTR1:#[0-9]+]]
19     fn may_unwind();
20 }
21
22 // Now, make sure that the LLVM attributes for this functions are correct.  First, make
23 // sure that the first item is correctly marked with the `nounwind` attribute:
24 //
25 // CHECK: attributes [[ATTR0]] = { {{.*}}nounwind{{.*}} }
26 //
27 // Now, check that foreign item is correctly marked without the `nounwind` attribute.
28 // CHECK-NOT: attributes [[ATTR1]] = { {{.*}}nounwind{{.*}} }