Auto merge of #102732 - RalfJung:assert_unsafe_precondition2, r=bjorn3

nicer errors from assert_unsafe_precondition

This makes the errors shown by cargo-careful nicer, and since `panic_no_unwind` is `nounwind noreturn` it hopefully doesn't have bad codegen impact. Thanks to `@bjorn3` for the hint!

Would be nice if we could somehow supply our own (static) message to print, currently it always prints `panic in a function that cannot unwind`. But still, this is better than before.
This commit is contained in:
bors 2022-10-12 14:39:43 +00:00
commit 538f118da1
8 changed files with 90 additions and 71 deletions

View file

@ -1,7 +1,7 @@
//@revisions: extern_block definition both
#![feature(rustc_attrs, c_unwind)]
#[cfg_attr(any(definition, both), rustc_allocator_nounwind)]
#[cfg_attr(any(definition, both), rustc_nounwind)]
#[no_mangle]
extern "C-unwind" fn nounwind() {
//[definition]~^ ERROR: abnormal termination: the program aborted execution
@ -11,7 +11,7 @@ extern "C-unwind" fn nounwind() {
fn main() {
extern "C-unwind" {
#[cfg_attr(any(extern_block, both), rustc_allocator_nounwind)]
#[cfg_attr(any(extern_block, both), rustc_nounwind)]
fn nounwind();
}
unsafe { nounwind() }

View file

@ -379,7 +379,7 @@ pub const INERT_ATTRIBUTES: &[BuiltinAttribute] = &[
// ==========================================================================
rustc_attr!(rustc_allocator, Normal, template!(Word), WarnFollowing, IMPL_DETAIL),
rustc_attr!(rustc_allocator_nounwind, Normal, template!(Word), WarnFollowing, IMPL_DETAIL),
rustc_attr!(rustc_nounwind, Normal, template!(Word), WarnFollowing, IMPL_DETAIL),
gated!(
alloc_error_handler, Normal, template!(Word), WarnFollowing,
experimental!(alloc_error_handler)