From b1b88109526c5324157d52ac8f09752710e95ec3 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Tue, 17 Aug 2021 22:34:15 +0100 Subject: [PATCH 1/3] Allow handle_alloc_error to unwind --- library/alloc/src/alloc.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/library/alloc/src/alloc.rs b/library/alloc/src/alloc.rs index d075658f51a..06ed92c6014 100644 --- a/library/alloc/src/alloc.rs +++ b/library/alloc/src/alloc.rs @@ -348,7 +348,6 @@ extern "Rust" { // This is the magic symbol to call the global alloc error handler. rustc generates // it to call `__rg_oom` if there is a `#[alloc_error_handler]`, or to call the // default implementations below (`__rdl_oom`) otherwise. - #[rustc_allocator_nounwind] fn __rust_alloc_error_handler(size: usize, align: usize) -> !; } @@ -367,7 +366,6 @@ extern "Rust" { #[stable(feature = "global_alloc", since = "1.28.0")] #[rustc_const_unstable(feature = "const_alloc_error", issue = "92523")] #[cfg(all(not(no_global_oom_handling), not(test)))] -#[rustc_allocator_nounwind] #[cold] pub const fn handle_alloc_error(layout: Layout) -> ! { const fn ct_error(_: Layout) -> ! { From 915a16035d64f2b7e676c7e77e1bf810ea448f22 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Mon, 4 Oct 2021 02:02:33 +0100 Subject: [PATCH 2/3] Mark __rgl_oom and __rd_oom as "C-unwind" --- library/alloc/src/alloc.rs | 4 ++-- library/alloc/src/lib.rs | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/library/alloc/src/alloc.rs b/library/alloc/src/alloc.rs index 06ed92c6014..9d4f9af91a5 100644 --- a/library/alloc/src/alloc.rs +++ b/library/alloc/src/alloc.rs @@ -396,13 +396,13 @@ pub mod __alloc_error_handler { // if there is no `#[alloc_error_handler]` #[rustc_std_internal_symbol] - pub unsafe extern "C" fn __rdl_oom(size: usize, _align: usize) -> ! { + pub unsafe extern "C-unwind" fn __rdl_oom(size: usize, _align: usize) -> ! { panic!("memory allocation of {} bytes failed", size) } // if there is an `#[alloc_error_handler]` #[rustc_std_internal_symbol] - pub unsafe extern "C" fn __rg_oom(size: usize, align: usize) -> ! { + pub unsafe extern "C-unwind" fn __rg_oom(size: usize, align: usize) -> ! { let layout = unsafe { Layout::from_size_align_unchecked(size, align) }; extern "Rust" { #[lang = "oom"] diff --git a/library/alloc/src/lib.rs b/library/alloc/src/lib.rs index dfd3771c1d0..a07071cb6fb 100644 --- a/library/alloc/src/lib.rs +++ b/library/alloc/src/lib.rs @@ -163,6 +163,7 @@ #![cfg_attr(test, feature(test))] #![feature(unboxed_closures)] #![feature(unsized_fn_params)] +#![feature(c_unwind)] // // Rustdoc features: #![feature(doc_cfg)] From 2082842340062eda5fa7215e831cdcd62379b0b3 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Sat, 5 Feb 2022 21:00:23 +0000 Subject: [PATCH 3/3] Update llvm-project submodule --- src/llvm-project | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llvm-project b/src/llvm-project index b6b46f596a7..fdc8f411ec9 160000 --- a/src/llvm-project +++ b/src/llvm-project @@ -1 +1 @@ -Subproject commit b6b46f596a7d2523ee1acd1c00e699615849da60 +Subproject commit fdc8f411ec9253d4eeb7a572b058be4f2131fd1c