Sync from rust 3153584170
This commit is contained in:
commit
670ee7ec28
|
@ -4,6 +4,7 @@
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
use rustc_ast::expand::allocator::{AllocatorKind, AllocatorTy, ALLOCATOR_METHODS};
|
use rustc_ast::expand::allocator::{AllocatorKind, AllocatorTy, ALLOCATOR_METHODS};
|
||||||
|
use rustc_session::config::OomStrategy;
|
||||||
|
|
||||||
/// Returns whether an allocator shim was created
|
/// Returns whether an allocator shim was created
|
||||||
pub(crate) fn codegen(
|
pub(crate) fn codegen(
|
||||||
|
@ -18,7 +19,13 @@ pub(crate) fn codegen(
|
||||||
if any_dynamic_crate {
|
if any_dynamic_crate {
|
||||||
false
|
false
|
||||||
} else if let Some(kind) = tcx.allocator_kind(()) {
|
} 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
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
|
@ -30,6 +37,7 @@ fn codegen_inner(
|
||||||
unwind_context: &mut UnwindContext,
|
unwind_context: &mut UnwindContext,
|
||||||
kind: AllocatorKind,
|
kind: AllocatorKind,
|
||||||
has_alloc_error_handler: bool,
|
has_alloc_error_handler: bool,
|
||||||
|
oom_strategy: OomStrategy,
|
||||||
) {
|
) {
|
||||||
let usize_ty = module.target_config().pointer_type();
|
let usize_ty = module.target_config().pointer_type();
|
||||||
|
|
||||||
|
@ -129,4 +137,11 @@ fn codegen_inner(
|
||||||
}
|
}
|
||||||
module.define_function(func_id, &mut ctx).unwrap();
|
module.define_function(func_id, &mut ctx).unwrap();
|
||||||
unwind_context.add_function(func_id, &ctx, module.isa());
|
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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
//! Handling of `static`s, `const`s and promoted allocations
|
//! Handling of `static`s, `const`s and promoted allocations
|
||||||
|
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||||
use rustc_errors::ErrorGuaranteed;
|
|
||||||
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
||||||
use rustc_middle::mir::interpret::{
|
use rustc_middle::mir::interpret::{
|
||||||
read_target_uint, AllocId, ConstAllocation, ConstValue, ErrorHandled, GlobalAlloc, Scalar,
|
read_target_uint, AllocId, ConstAllocation, ConstValue, ErrorHandled, GlobalAlloc, Scalar,
|
||||||
|
@ -54,7 +53,7 @@ pub(crate) fn check_constants(fx: &mut FunctionCx<'_, '_, '_>) -> bool {
|
||||||
{
|
{
|
||||||
all_constants_ok = false;
|
all_constants_ok = false;
|
||||||
match err {
|
match err {
|
||||||
ErrorHandled::Reported(ErrorGuaranteed) | ErrorHandled::Linted => {
|
ErrorHandled::Reported(_) | ErrorHandled::Linted => {
|
||||||
fx.tcx.sess.span_err(constant.span, "erroneous constant encountered");
|
fx.tcx.sess.span_err(constant.span, "erroneous constant encountered");
|
||||||
}
|
}
|
||||||
ErrorHandled::TooGeneric => {
|
ErrorHandled::TooGeneric => {
|
||||||
|
|
Loading…
Reference in a new issue