Skip to content

Commit 5523243

Browse files
author
The Miri Conjob Bot
committed
Merge from rustc
2 parents 4cada3a + d4b7198 commit 5523243

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

tests/fail/panic/double_panic.stderr

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ second
66
stack backtrace:
77
thread 'main' panicked at RUSTLIB/core/src/panicking.rs:LL:CC:
88
panic in a destructor during cleanup
9-
stack backtrace:
109
thread caused non-unwinding panic. aborting.
1110
error: abnormal termination: the program aborted execution
1211
--> RUSTLIB/std/src/sys/PLATFORM/mod.rs:LL:CC
@@ -19,7 +18,7 @@ LL | ABORT();
1918
= note: inside closure at RUSTLIB/std/src/panicking.rs:LL:CC
2019
= note: inside `std::sys_common::backtrace::__rust_end_short_backtrace::<[closure@std::panicking::begin_panic_handler::{closure#0}], !>` at RUSTLIB/std/src/sys_common/backtrace.rs:LL:CC
2120
= note: inside `std::panicking::begin_panic_handler` at RUSTLIB/std/src/panicking.rs:LL:CC
22-
= note: inside `core::panicking::panic_nounwind` at RUSTLIB/core/src/panicking.rs:LL:CC
21+
= note: inside `core::panicking::panic_nounwind_nobacktrace` at RUSTLIB/core/src/panicking.rs:LL:CC
2322
= note: inside `core::panicking::panic_in_cleanup` at RUSTLIB/core/src/panicking.rs:LL:CC
2423
note: inside `main`
2524
--> $DIR/double_panic.rs:LL:CC
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use std::num;
2+
use std::mem;
3+
4+
fn test_abi_compat<T, U>(t: T, u: U) {
5+
fn id<T>(x: T) -> T { x }
6+
7+
// This checks ABI compatibility both for arguments and return values,
8+
// in both directions.
9+
let f: fn(T) -> T = id;
10+
let f: fn(U) -> U = unsafe { std::mem::transmute(f) };
11+
drop(f(u));
12+
13+
let f: fn(U) -> U = id;
14+
let f: fn(T) -> T = unsafe { std::mem::transmute(f) };
15+
drop(f(t));
16+
}
17+
18+
fn main() {
19+
test_abi_compat(0u32, 'x');
20+
test_abi_compat(&0u32, &([true; 4], [0u32; 0]));
21+
test_abi_compat(0u32, mem::MaybeUninit::new(0u32));
22+
test_abi_compat(42u32, num::NonZeroU32::new(1).unwrap());
23+
test_abi_compat(0u32, Some(num::NonZeroU32::new(1).unwrap()));
24+
test_abi_compat(0u32, 0i32);
25+
// Note that `bool` and `u8` are *not* compatible!
26+
// One of them has `arg_ext: Zext`, the other does not.
27+
}

0 commit comments

Comments
 (0)