Skip to content

Commit

Permalink
Auto merge of rust-lang#88098 - Amanieu:oom_panic, r=nagisa
Browse files Browse the repository at this point in the history
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 rust-lang#43596).

Perf and binary size tests show negligible impact.
  • Loading branch information
bors committed Mar 18, 2022
2 parents c56a10c + e291495 commit 86daae2
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion src/allocator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use crate::prelude::*;

use rustc_ast::expand::allocator::{AllocatorKind, AllocatorTy, ALLOCATOR_METHODS};
use rustc_session::config::OomStrategy;

/// Returns whether an allocator shim was created
pub(crate) fn codegen(
Expand All @@ -18,7 +19,13 @@ pub(crate) fn codegen(
if any_dynamic_crate {
false
} else if let Some(kind) = tcx.allocator_kind(()) {
codegen_inner(module, unwind_context, kind, tcx.lang_items().oom().is_some());
codegen_inner(
module,
unwind_context,
kind,
tcx.lang_items().oom().is_some(),
tcx.sess.opts.debugging_opts.oom,
);
true
} else {
false
Expand All @@ -30,6 +37,7 @@ fn codegen_inner(
unwind_context: &mut UnwindContext,
kind: AllocatorKind,
has_alloc_error_handler: bool,
oom_strategy: OomStrategy,
) {
let usize_ty = module.target_config().pointer_type();

Expand Down Expand Up @@ -129,4 +137,11 @@ fn codegen_inner(
}
module.define_function(func_id, &mut ctx).unwrap();
unwind_context.add_function(func_id, &ctx, module.isa());

let data_id = module.declare_data(OomStrategy::SYMBOL, Linkage::Export, false, false).unwrap();
let mut data_ctx = DataContext::new();
data_ctx.set_align(1);
let val = oom_strategy.should_panic();
data_ctx.define(Box::new([val]));
module.define_data(data_id, &data_ctx).unwrap();
}

0 comments on commit 86daae2

Please sign in to comment.