diff options
| author | bors <bors@rust-lang.org> | 2022-03-18 03:01:46 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-03-18 03:01:46 +0000 |
| commit | fadd1c536a1cc7b2b605abc8e8482fb15363b3a7 (patch) | |
| tree | d01a504b0a461eb810c05f98d832f531511d2820 | |
| parent | 1c389322d226db421892abb64e0730b60eb15712 (diff) | |
| parent | 6fcfc3d8773ee0f318a3311bb02655e0ccafbc14 (diff) | |
Auto merge of #88098 - Amanieu:oom_panic, r=nagisa
Implement -Z oom=panic This PR removes the `#[rustc_allocator_nounwind]` attribute on `alloc_error_handler` which allows it to unwind with a panic instead of always aborting. This is then used to implement `-Z oom=panic` as per RFC 2116 (tracking issue #43596). Perf and binary size tests show negligible impact.
| -rw-r--r-- | src/allocator.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/allocator.rs b/src/allocator.rs index 6378a31202c..c761e5aabd1 100644 --- a/src/allocator.rs +++ b/src/allocator.rs @@ -1,7 +1,8 @@ -use gccjit::{FunctionType, ToRValue}; +use gccjit::{FunctionType, GlobalKind, ToRValue}; use rustc_ast::expand::allocator::{AllocatorKind, AllocatorTy, ALLOCATOR_METHODS}; use rustc_middle::bug; use rustc_middle::ty::TyCtxt; +use rustc_session::config::OomStrategy; use rustc_span::symbol::sym; use crate::GccContext; @@ -113,4 +114,10 @@ pub(crate) unsafe fn codegen(tcx: TyCtxt<'_>, mods: &mut GccContext, _module_nam let _ret = context.new_call(None, callee, &args); //llvm::LLVMSetTailCall(ret, True); block.end_with_void_return(None); + + let name = OomStrategy::SYMBOL.to_string(); + let global = context.new_global(None, GlobalKind::Exported, i8, name); + let value = tcx.sess.opts.debugging_opts.oom.should_panic(); + let value = context.new_rvalue_from_int(i8, value as i32); + global.global_set_initializer_rvalue(value); } |
