Skip to content

Commit 29bed26

Browse files
committed
slightly more typed interface to panic implementation
1 parent 463ce40 commit 29bed26

File tree

3 files changed

+6
-5
lines changed

3 files changed

+6
-5
lines changed

library/panic_abort/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414
#![feature(core_intrinsics)]
1515
#![feature(nll)]
1616
#![feature(panic_runtime)]
17+
#![feature(std_internals)]
1718
#![feature(staged_api)]
1819
#![feature(rustc_attrs)]
1920
#![feature(asm)]
2021

2122
use core::any::Any;
23+
use core::panic::BoxMeUp;
2224

2325
#[rustc_std_internal_symbol]
2426
#[allow(improper_ctypes_definitions)]
@@ -28,7 +30,7 @@ pub unsafe extern "C" fn __rust_panic_cleanup(_: *mut u8) -> *mut (dyn Any + Sen
2830

2931
// "Leak" the payload and shim to the relevant abort on the platform in question.
3032
#[rustc_std_internal_symbol]
31-
pub unsafe extern "C" fn __rust_start_panic(_payload: usize) -> u32 {
33+
pub unsafe extern "C" fn __rust_start_panic(_payload: *mut &mut dyn BoxMeUp) -> u32 {
3234
abort();
3335

3436
cfg_if::cfg_if! {

library/panic_unwind/src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,7 @@ pub unsafe extern "C" fn __rust_panic_cleanup(payload: *mut u8) -> *mut (dyn Any
104104
// implementation.
105105
#[rustc_std_internal_symbol]
106106
#[unwind(allowed)]
107-
pub unsafe extern "C" fn __rust_start_panic(payload: usize) -> u32 {
108-
let payload = payload as *mut &mut dyn BoxMeUp;
107+
pub unsafe extern "C" fn __rust_start_panic(payload: *mut &mut dyn BoxMeUp) -> u32 {
109108
let payload = (*payload).take_box();
110109

111110
imp::panic(Box::from_raw(payload))

library/std/src/panicking.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ extern "C" {
4848
/// It cannot be `Box<dyn BoxMeUp>` because the other end of this call does not depend
4949
/// on liballoc, and thus cannot use `Box`.
5050
#[unwind(allowed)]
51-
fn __rust_start_panic(payload: usize) -> u32;
51+
fn __rust_start_panic(payload: *mut &mut dyn BoxMeUp) -> u32;
5252
}
5353

5454
/// This function is called by the panic runtime if FFI code catches a Rust
@@ -637,7 +637,7 @@ pub fn rust_panic_without_hook(payload: Box<dyn Any + Send>) -> ! {
637637
fn rust_panic(mut msg: &mut dyn BoxMeUp) -> ! {
638638
let code = unsafe {
639639
let obj = &mut msg as *mut &mut dyn BoxMeUp;
640-
__rust_start_panic(obj as usize)
640+
__rust_start_panic(obj)
641641
};
642642
rtabort!("failed to initiate panic, error {}", code)
643643
}

0 commit comments

Comments
 (0)