Fix some minor issues
This commit is contained in:
parent
bdcc02360f
commit
5b682354f2
@ -17,10 +17,11 @@
|
|||||||
#![feature(panic_runtime)]
|
#![feature(panic_runtime)]
|
||||||
#![feature(staged_api)]
|
#![feature(staged_api)]
|
||||||
#![feature(rustc_attrs)]
|
#![feature(rustc_attrs)]
|
||||||
#![feature(raw)]
|
|
||||||
|
use core::any::Any;
|
||||||
|
|
||||||
#[rustc_std_internal_symbol]
|
#[rustc_std_internal_symbol]
|
||||||
pub unsafe extern "C" fn __rust_cleanup(_: *mut u8) -> core::raw::TraitObject {
|
pub unsafe extern "C" fn __rust_panic_cleanup(_: *mut u8) -> *mut (dyn Any + Send + 'static) {
|
||||||
unreachable!()
|
unreachable!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#![feature(panic_runtime)]
|
#![feature(panic_runtime)]
|
||||||
|
|
||||||
use alloc::boxed::Box;
|
use alloc::boxed::Box;
|
||||||
|
use core::any::Any;
|
||||||
use core::panic::BoxMeUp;
|
use core::panic::BoxMeUp;
|
||||||
|
|
||||||
// If adding to this list, you should also look at libstd::panicking's identical
|
// If adding to this list, you should also look at libstd::panicking's identical
|
||||||
@ -70,10 +71,10 @@
|
|||||||
mod dwarf;
|
mod dwarf;
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn __rust_panic_cleanup(payload: *mut u8) -> core::raw::TraitObject {
|
pub unsafe extern "C" fn __rust_panic_cleanup(payload: *mut u8) -> *mut (dyn Any + Send + 'static) {
|
||||||
let payload = payload as *mut imp::Payload;
|
let payload = payload as *mut imp::Payload;
|
||||||
let payload = *(payload);
|
let payload = *(payload);
|
||||||
core::mem::transmute(imp::cleanup(payload))
|
Box::into_raw(imp::cleanup(payload))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Entry point for raising an exception, just delegates to the platform-specific
|
// Entry point for raising an exception, just delegates to the platform-specific
|
||||||
|
@ -67,7 +67,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
/// The payload ptr here is actually the same as the payload ptr for the try
|
/// The payload ptr here is actually the same as the payload ptr for the try
|
||||||
/// intrinsic (i.e., is really `*mut [u64; 2]` or `*mut *mut u8`).
|
/// intrinsic (i.e., is really `*mut [u64; 2]` or `*mut *mut u8`).
|
||||||
fn __rust_panic_cleanup(payload: *mut u8) -> core::raw::TraitObject;
|
fn __rust_panic_cleanup(payload: *mut u8) -> *mut (dyn Any + Send + 'static);
|
||||||
|
|
||||||
/// `payload` is actually a `*mut &mut dyn BoxMeUp` but that would cause FFI warnings.
|
/// `payload` is actually a `*mut &mut dyn BoxMeUp` but that would cause FFI warnings.
|
||||||
/// It cannot be `Box<dyn BoxMeUp>` because the other end of this call does not depend
|
/// It cannot be `Box<dyn BoxMeUp>` because the other end of this call does not depend
|
||||||
@ -313,7 +313,7 @@ union Data<F, R> {
|
|||||||
// non-cold function, though, as of the writing of this comment).
|
// non-cold function, though, as of the writing of this comment).
|
||||||
#[cold]
|
#[cold]
|
||||||
unsafe fn cleanup(mut payload: Payload) -> Box<dyn Any + Send + 'static> {
|
unsafe fn cleanup(mut payload: Payload) -> Box<dyn Any + Send + 'static> {
|
||||||
let obj = crate::mem::transmute(__rust_panic_cleanup(&mut payload as *mut _ as *mut u8));
|
let obj = Box::from_raw(__rust_panic_cleanup(&mut payload as *mut _ as *mut u8));
|
||||||
update_panic_count(-1);
|
update_panic_count(-1);
|
||||||
obj
|
obj
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user