mirror of https://github.com/rust-lang/rust.git
compiler: Directly use rustc_abi in mir_transform
This commit is contained in:
parent
236fe33345
commit
843b6e0859
|
@ -1,9 +1,9 @@
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_ast::InlineAsmOptions;
|
use rustc_ast::InlineAsmOptions;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::span_bug;
|
use rustc_middle::span_bug;
|
||||||
use rustc_middle::ty::{self, TyCtxt, layout};
|
use rustc_middle::ty::{self, TyCtxt, layout};
|
||||||
use rustc_target::spec::PanicStrategy;
|
use rustc_target::spec::PanicStrategy;
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
|
|
||||||
/// A pass that runs which is targeted at ensuring that codegen guarantees about
|
/// A pass that runs which is targeted at ensuring that codegen guarantees about
|
||||||
/// unwinding are upheld for compilations of panic=abort programs.
|
/// unwinding are upheld for compilations of panic=abort programs.
|
||||||
|
@ -38,9 +38,9 @@ impl<'tcx> crate::MirPass<'tcx> for AbortUnwindingCalls {
|
||||||
let body_ty = tcx.type_of(def_id).skip_binder();
|
let body_ty = tcx.type_of(def_id).skip_binder();
|
||||||
let body_abi = match body_ty.kind() {
|
let body_abi = match body_ty.kind() {
|
||||||
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
|
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
|
||||||
ty::Closure(..) => Abi::RustCall,
|
ty::Closure(..) => ExternAbi::RustCall,
|
||||||
ty::CoroutineClosure(..) => Abi::RustCall,
|
ty::CoroutineClosure(..) => ExternAbi::RustCall,
|
||||||
ty::Coroutine(..) => Abi::Rust,
|
ty::Coroutine(..) => ExternAbi::Rust,
|
||||||
ty::Error(_) => return,
|
ty::Error(_) => return,
|
||||||
_ => span_bug!(body.span, "unexpected body ty: {:?}", body_ty),
|
_ => span_bug!(body.span, "unexpected body ty: {:?}", body_ty),
|
||||||
};
|
};
|
||||||
|
@ -79,10 +79,10 @@ impl<'tcx> crate::MirPass<'tcx> for AbortUnwindingCalls {
|
||||||
}
|
}
|
||||||
TerminatorKind::Drop { .. } => {
|
TerminatorKind::Drop { .. } => {
|
||||||
tcx.sess.opts.unstable_opts.panic_in_drop == PanicStrategy::Unwind
|
tcx.sess.opts.unstable_opts.panic_in_drop == PanicStrategy::Unwind
|
||||||
&& layout::fn_can_unwind(tcx, None, Abi::Rust)
|
&& layout::fn_can_unwind(tcx, None, ExternAbi::Rust)
|
||||||
}
|
}
|
||||||
TerminatorKind::Assert { .. } | TerminatorKind::FalseUnwind { .. } => {
|
TerminatorKind::Assert { .. } | TerminatorKind::FalseUnwind { .. } => {
|
||||||
layout::fn_can_unwind(tcx, None, Abi::Rust)
|
layout::fn_can_unwind(tcx, None, ExternAbi::Rust)
|
||||||
}
|
}
|
||||||
TerminatorKind::InlineAsm { options, .. } => {
|
TerminatorKind::InlineAsm { options, .. } => {
|
||||||
options.contains(InlineAsmOptions::MAY_UNWIND)
|
options.contains(InlineAsmOptions::MAY_UNWIND)
|
||||||
|
|
|
@ -54,6 +54,7 @@ mod by_move_body;
|
||||||
use std::{iter, ops};
|
use std::{iter, ops};
|
||||||
|
|
||||||
pub(super) use by_move_body::coroutine_by_move_body_def_id;
|
pub(super) use by_move_body::coroutine_by_move_body_def_id;
|
||||||
|
use rustc_abi::{FieldIdx, VariantIdx};
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
use rustc_errors::pluralize;
|
use rustc_errors::pluralize;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
@ -75,7 +76,6 @@ use rustc_mir_dataflow::storage::always_storage_live_locals;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_span::def_id::{DefId, LocalDefId};
|
use rustc_span::def_id::{DefId, LocalDefId};
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_target::abi::{FieldIdx, VariantIdx};
|
|
||||||
use rustc_target::spec::PanicStrategy;
|
use rustc_target::spec::PanicStrategy;
|
||||||
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
||||||
use rustc_trait_selection::infer::TyCtxtInferExt as _;
|
use rustc_trait_selection::infer::TyCtxtInferExt as _;
|
||||||
|
|
|
@ -69,6 +69,7 @@
|
||||||
//! in case precise captures (edition 2021 closure capture rules) caused the inner coroutine
|
//! in case precise captures (edition 2021 closure capture rules) caused the inner coroutine
|
||||||
//! to split one field capture into two.
|
//! to split one field capture into two.
|
||||||
|
|
||||||
|
use rustc_abi::{FieldIdx, VariantIdx};
|
||||||
use rustc_data_structures::steal::Steal;
|
use rustc_data_structures::steal::Steal;
|
||||||
use rustc_data_structures::unord::UnordMap;
|
use rustc_data_structures::unord::UnordMap;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
@ -80,7 +81,6 @@ use rustc_middle::mir::visit::MutVisitor;
|
||||||
use rustc_middle::mir::{self, dump_mir};
|
use rustc_middle::mir::{self, dump_mir};
|
||||||
use rustc_middle::ty::{self, InstanceKind, Ty, TyCtxt, TypeVisitableExt};
|
use rustc_middle::ty::{self, InstanceKind, Ty, TyCtxt, TypeVisitableExt};
|
||||||
use rustc_span::symbol::kw;
|
use rustc_span::symbol::kw;
|
||||||
use rustc_target::abi::{FieldIdx, VariantIdx};
|
|
||||||
|
|
||||||
pub(crate) fn coroutine_by_move_body_def_id<'tcx>(
|
pub(crate) fn coroutine_by_move_body_def_id<'tcx>(
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
|
|
|
@ -662,7 +662,7 @@ impl<'a, 'tcx> ConstAnalysis<'a, 'tcx> {
|
||||||
// Exactly one side is known, attempt some algebraic simplifications.
|
// Exactly one side is known, attempt some algebraic simplifications.
|
||||||
(FlatSet::Elem(const_arg), _) | (_, FlatSet::Elem(const_arg)) => {
|
(FlatSet::Elem(const_arg), _) | (_, FlatSet::Elem(const_arg)) => {
|
||||||
let layout = const_arg.layout;
|
let layout = const_arg.layout;
|
||||||
if !matches!(layout.backend_repr, rustc_target::abi::BackendRepr::Scalar(..)) {
|
if !matches!(layout.backend_repr, rustc_abi::BackendRepr::Scalar(..)) {
|
||||||
return (FlatSet::Top, FlatSet::Top);
|
return (FlatSet::Top, FlatSet::Top);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
//!
|
//!
|
||||||
//! Box is not actually a pointer so it is incorrect to dereference it directly.
|
//! Box is not actually a pointer so it is incorrect to dereference it directly.
|
||||||
|
|
||||||
|
use rustc_abi::FieldIdx;
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
use rustc_middle::mir::patch::MirPatch;
|
use rustc_middle::mir::patch::MirPatch;
|
||||||
use rustc_middle::mir::visit::MutVisitor;
|
use rustc_middle::mir::visit::MutVisitor;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::span_bug;
|
use rustc_middle::span_bug;
|
||||||
use rustc_middle::ty::{Ty, TyCtxt};
|
use rustc_middle::ty::{Ty, TyCtxt};
|
||||||
use rustc_target::abi::FieldIdx;
|
|
||||||
|
|
||||||
/// Constructs the types used when accessing a Box's pointer
|
/// Constructs the types used when accessing a Box's pointer
|
||||||
fn build_ptr_tys<'tcx>(
|
fn build_ptr_tys<'tcx>(
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
|
use rustc_abi::{FieldIdx, VariantIdx};
|
||||||
use rustc_index::IndexVec;
|
use rustc_index::IndexVec;
|
||||||
use rustc_index::bit_set::BitSet;
|
use rustc_index::bit_set::BitSet;
|
||||||
use rustc_middle::mir::patch::MirPatch;
|
use rustc_middle::mir::patch::MirPatch;
|
||||||
|
@ -14,7 +15,6 @@ use rustc_mir_dataflow::{
|
||||||
Analysis, MoveDataParamEnv, ResultsCursor, on_all_children_bits, on_lookup_result_bits,
|
Analysis, MoveDataParamEnv, ResultsCursor, on_all_children_bits, on_lookup_result_bits,
|
||||||
};
|
};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_target::abi::{FieldIdx, VariantIdx};
|
|
||||||
use tracing::{debug, instrument};
|
use tracing::{debug, instrument};
|
||||||
|
|
||||||
use crate::deref_separator::deref_finder;
|
use crate::deref_separator::deref_finder;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_hir::def_id::{LOCAL_CRATE, LocalDefId};
|
use rustc_hir::def_id::{LOCAL_CRATE, LocalDefId};
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::query::{LocalCrate, Providers};
|
use rustc_middle::query::{LocalCrate, Providers};
|
||||||
|
@ -5,7 +6,6 @@ use rustc_middle::ty::{self, TyCtxt, layout};
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
use rustc_session::lint::builtin::FFI_UNWIND_CALLS;
|
use rustc_session::lint::builtin::FFI_UNWIND_CALLS;
|
||||||
use rustc_target::spec::PanicStrategy;
|
use rustc_target::spec::PanicStrategy;
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
use crate::errors;
|
use crate::errors;
|
||||||
|
@ -26,9 +26,9 @@ fn has_ffi_unwind_calls(tcx: TyCtxt<'_>, local_def_id: LocalDefId) -> bool {
|
||||||
let body_ty = tcx.type_of(def_id).skip_binder();
|
let body_ty = tcx.type_of(def_id).skip_binder();
|
||||||
let body_abi = match body_ty.kind() {
|
let body_abi = match body_ty.kind() {
|
||||||
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
|
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
|
||||||
ty::Closure(..) => Abi::RustCall,
|
ty::Closure(..) => ExternAbi::RustCall,
|
||||||
ty::CoroutineClosure(..) => Abi::RustCall,
|
ty::CoroutineClosure(..) => ExternAbi::RustCall,
|
||||||
ty::Coroutine(..) => Abi::Rust,
|
ty::Coroutine(..) => ExternAbi::Rust,
|
||||||
ty::Error(_) => return false,
|
ty::Error(_) => return false,
|
||||||
_ => span_bug!(body.span, "unexpected body ty: {:?}", body_ty),
|
_ => span_bug!(body.span, "unexpected body ty: {:?}", body_ty),
|
||||||
};
|
};
|
||||||
|
@ -53,7 +53,11 @@ fn has_ffi_unwind_calls(tcx: TyCtxt<'_>, local_def_id: LocalDefId) -> bool {
|
||||||
|
|
||||||
// Rust calls cannot themselves create foreign unwinds.
|
// Rust calls cannot themselves create foreign unwinds.
|
||||||
// We assume this is true for intrinsics as well.
|
// We assume this is true for intrinsics as well.
|
||||||
if let Abi::RustIntrinsic | Abi::Rust | Abi::RustCall | Abi::RustCold = sig.abi() {
|
if let ExternAbi::RustIntrinsic
|
||||||
|
| ExternAbi::Rust
|
||||||
|
| ExternAbi::RustCall
|
||||||
|
| ExternAbi::RustCold = sig.abi()
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
use rustc_middle::mir::visit::Visitor;
|
use rustc_middle::mir::visit::Visitor;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
|
@ -7,7 +8,6 @@ use rustc_session::lint::builtin::FUNCTION_ITEM_REFERENCES;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
|
|
||||||
use crate::errors;
|
use crate::errors;
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ impl<'tcx> FunctionItemRefChecker<'_, 'tcx> {
|
||||||
let fn_sig = self.tcx.fn_sig(fn_id).instantiate(self.tcx, fn_args);
|
let fn_sig = self.tcx.fn_sig(fn_id).instantiate(self.tcx, fn_args);
|
||||||
let unsafety = fn_sig.safety().prefix_str();
|
let unsafety = fn_sig.safety().prefix_str();
|
||||||
let abi = match fn_sig.abi() {
|
let abi = match fn_sig.abi() {
|
||||||
Abi::Rust => String::from(""),
|
ExternAbi::Rust => String::from(""),
|
||||||
other_abi => {
|
other_abi => {
|
||||||
let mut s = String::from("extern \"");
|
let mut s = String::from("extern \"");
|
||||||
s.push_str(other_abi.name());
|
s.push_str(other_abi.name());
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::ops::{Range, RangeFrom};
|
use std::ops::{Range, RangeFrom};
|
||||||
|
|
||||||
|
use rustc_abi::{ExternAbi, FieldIdx};
|
||||||
use rustc_attr::InlineAttr;
|
use rustc_attr::InlineAttr;
|
||||||
use rustc_hir::def::DefKind;
|
use rustc_hir::def::DefKind;
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
|
@ -18,8 +19,6 @@ use rustc_middle::ty::{
|
||||||
use rustc_session::config::{DebugInfo, OptLevel};
|
use rustc_session::config::{DebugInfo, OptLevel};
|
||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::sym;
|
use rustc_span::sym;
|
||||||
use rustc_target::abi::FieldIdx;
|
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use tracing::{debug, instrument, trace, trace_span};
|
use tracing::{debug, instrument, trace, trace_span};
|
||||||
|
|
||||||
use crate::cost_checker::CostChecker;
|
use crate::cost_checker::CostChecker;
|
||||||
|
@ -254,7 +253,7 @@ impl<'tcx> Inliner<'tcx> {
|
||||||
trace!(?output_type, ?destination_ty);
|
trace!(?output_type, ?destination_ty);
|
||||||
return Err("failed to normalize return type");
|
return Err("failed to normalize return type");
|
||||||
}
|
}
|
||||||
if callsite.fn_sig.abi() == Abi::RustCall {
|
if callsite.fn_sig.abi() == ExternAbi::RustCall {
|
||||||
// FIXME: Don't inline user-written `extern "rust-call"` functions,
|
// FIXME: Don't inline user-written `extern "rust-call"` functions,
|
||||||
// since this is generally perf-negative on rustc, and we hope that
|
// since this is generally perf-negative on rustc, and we hope that
|
||||||
// LLVM will inline these functions instead.
|
// LLVM will inline these functions instead.
|
||||||
|
@ -808,7 +807,7 @@ impl<'tcx> Inliner<'tcx> {
|
||||||
// tmp2 = tuple_tmp.2
|
// tmp2 = tuple_tmp.2
|
||||||
//
|
//
|
||||||
// and the vector is `[closure_ref, tmp0, tmp1, tmp2]`.
|
// and the vector is `[closure_ref, tmp0, tmp1, tmp2]`.
|
||||||
if callsite.fn_sig.abi() == Abi::RustCall && callee_body.spread_arg.is_none() {
|
if callsite.fn_sig.abi() == ExternAbi::RustCall && callee_body.spread_arg.is_none() {
|
||||||
// FIXME(edition_2024): switch back to a normal method call.
|
// FIXME(edition_2024): switch back to a normal method call.
|
||||||
let mut args = <_>::into_iter(args);
|
let mut args = <_>::into_iter(args);
|
||||||
let self_ = self.create_temp_if_necessary(
|
let self_ = self.create_temp_if_necessary(
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
//! Performs various peephole optimizations.
|
//! Performs various peephole optimizations.
|
||||||
|
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_ast::attr;
|
use rustc_ast::attr;
|
||||||
use rustc_hir::LangItem;
|
use rustc_hir::LangItem;
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
|
@ -8,7 +9,6 @@ use rustc_middle::ty::layout::ValidityRequirement;
|
||||||
use rustc_middle::ty::{self, GenericArgsRef, ParamEnv, Ty, TyCtxt, layout};
|
use rustc_middle::ty::{self, GenericArgsRef, ParamEnv, Ty, TyCtxt, layout};
|
||||||
use rustc_span::sym;
|
use rustc_span::sym;
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::Symbol;
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
|
|
||||||
use crate::simplify::simplify_duplicate_switch_targets;
|
use crate::simplify::simplify_duplicate_switch_targets;
|
||||||
use crate::take_array;
|
use crate::take_array;
|
||||||
|
@ -321,8 +321,8 @@ impl<'tcx> InstSimplifyContext<'_, 'tcx> {
|
||||||
let body_ty = self.tcx.type_of(def_id).skip_binder();
|
let body_ty = self.tcx.type_of(def_id).skip_binder();
|
||||||
let body_abi = match body_ty.kind() {
|
let body_abi = match body_ty.kind() {
|
||||||
ty::FnDef(..) => body_ty.fn_sig(self.tcx).abi(),
|
ty::FnDef(..) => body_ty.fn_sig(self.tcx).abi(),
|
||||||
ty::Closure(..) => Abi::RustCall,
|
ty::Closure(..) => ExternAbi::RustCall,
|
||||||
ty::Coroutine(..) => Abi::Rust,
|
ty::Coroutine(..) => ExternAbi::Rust,
|
||||||
_ => bug!("unexpected body ty: {:?}", body_ty),
|
_ => bug!("unexpected body ty: {:?}", body_ty),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
//! Likewise, applying the optimisation can create a lot of new MIR, so we bound the instruction
|
//! Likewise, applying the optimisation can create a lot of new MIR, so we bound the instruction
|
||||||
//! cost by `MAX_COST`.
|
//! cost by `MAX_COST`.
|
||||||
|
|
||||||
|
use rustc_abi::{TagEncoding, Variants};
|
||||||
use rustc_arena::DroplessArena;
|
use rustc_arena::DroplessArena;
|
||||||
use rustc_const_eval::const_eval::DummyMachine;
|
use rustc_const_eval::const_eval::DummyMachine;
|
||||||
use rustc_const_eval::interpret::{ImmTy, Immediate, InterpCx, OpTy, Projectable};
|
use rustc_const_eval::interpret::{ImmTy, Immediate, InterpCx, OpTy, Projectable};
|
||||||
|
@ -50,7 +51,6 @@ use rustc_middle::ty::{self, ScalarInt, TyCtxt};
|
||||||
use rustc_mir_dataflow::lattice::HasBottom;
|
use rustc_mir_dataflow::lattice::HasBottom;
|
||||||
use rustc_mir_dataflow::value_analysis::{Map, PlaceIndex, State, TrackElem};
|
use rustc_mir_dataflow::value_analysis::{Map, PlaceIndex, State, TrackElem};
|
||||||
use rustc_span::DUMMY_SP;
|
use rustc_span::DUMMY_SP;
|
||||||
use rustc_target::abi::{TagEncoding, Variants};
|
|
||||||
use tracing::{debug, instrument, trace};
|
use tracing::{debug, instrument, trace};
|
||||||
|
|
||||||
use crate::cost_checker::CostChecker;
|
use crate::cost_checker::CostChecker;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
|
use rustc_abi::{HasDataLayout, Size, TagEncoding, Variants};
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_middle::mir::interpret::AllocId;
|
use rustc_middle::mir::interpret::AllocId;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::ty::util::IntTypeExt;
|
use rustc_middle::ty::util::IntTypeExt;
|
||||||
use rustc_middle::ty::{self, AdtDef, ParamEnv, Ty, TyCtxt};
|
use rustc_middle::ty::{self, AdtDef, ParamEnv, Ty, TyCtxt};
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
use rustc_target::abi::{HasDataLayout, Size, TagEncoding, Variants};
|
|
||||||
|
|
||||||
/// A pass that seeks to optimize unnecessary moves of large enum types, if there is a large
|
/// A pass that seeks to optimize unnecessary moves of large enum types, if there is a large
|
||||||
/// enough discrepancy between them.
|
/// enough discrepancy between them.
|
||||||
|
@ -249,8 +249,8 @@ impl EnumSizeOpt {
|
||||||
macro_rules! encode_store {
|
macro_rules! encode_store {
|
||||||
($curr_idx: expr, $endian: expr, $bytes: expr) => {
|
($curr_idx: expr, $endian: expr, $bytes: expr) => {
|
||||||
let bytes = match $endian {
|
let bytes = match $endian {
|
||||||
rustc_target::abi::Endian::Little => $bytes.to_le_bytes(),
|
rustc_abi::Endian::Little => $bytes.to_le_bytes(),
|
||||||
rustc_target::abi::Endian::Big => $bytes.to_be_bytes(),
|
rustc_abi::Endian::Big => $bytes.to_be_bytes(),
|
||||||
};
|
};
|
||||||
for (i, b) in bytes.into_iter().enumerate() {
|
for (i, b) in bytes.into_iter().enumerate() {
|
||||||
data[$curr_idx + i] = b;
|
data[$curr_idx + i] = b;
|
||||||
|
@ -263,10 +263,10 @@ impl EnumSizeOpt {
|
||||||
target_bytes * adt_def.discriminant_for_variant(tcx, var_idx).val as usize;
|
target_bytes * adt_def.discriminant_for_variant(tcx, var_idx).val as usize;
|
||||||
let sz = layout.size;
|
let sz = layout.size;
|
||||||
match ptr_sized_int {
|
match ptr_sized_int {
|
||||||
rustc_target::abi::Integer::I32 => {
|
rustc_abi::Integer::I32 => {
|
||||||
encode_store!(curr_idx, data_layout.endian, sz.bytes() as u32);
|
encode_store!(curr_idx, data_layout.endian, sz.bytes() as u32);
|
||||||
}
|
}
|
||||||
rustc_target::abi::Integer::I64 => {
|
rustc_abi::Integer::I64 => {
|
||||||
encode_store!(curr_idx, data_layout.endian, sz.bytes());
|
encode_store!(curr_idx, data_layout.endian, sz.bytes());
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
use std::iter;
|
use std::iter;
|
||||||
|
|
||||||
|
use rustc_abi::Integer;
|
||||||
use rustc_index::IndexSlice;
|
use rustc_index::IndexSlice;
|
||||||
use rustc_middle::mir::patch::MirPatch;
|
use rustc_middle::mir::patch::MirPatch;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::ty::layout::{IntegerExt, TyAndLayout};
|
use rustc_middle::ty::layout::{IntegerExt, TyAndLayout};
|
||||||
use rustc_middle::ty::{ParamEnv, ScalarInt, Ty, TyCtxt};
|
use rustc_middle::ty::{ParamEnv, ScalarInt, Ty, TyCtxt};
|
||||||
use rustc_target::abi::Integer;
|
|
||||||
use rustc_type_ir::TyKind::*;
|
use rustc_type_ir::TyKind::*;
|
||||||
|
|
||||||
use super::simplify::simplify_cfg;
|
use super::simplify::simplify_cfg;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
|
use rustc_abi::FieldIdx;
|
||||||
use rustc_index::bit_set::ChunkedBitSet;
|
use rustc_index::bit_set::ChunkedBitSet;
|
||||||
use rustc_middle::mir::{Body, TerminatorKind};
|
use rustc_middle::mir::{Body, TerminatorKind};
|
||||||
use rustc_middle::ty::{self, GenericArgsRef, ParamEnv, Ty, TyCtxt, VariantDef};
|
use rustc_middle::ty::{self, GenericArgsRef, ParamEnv, Ty, TyCtxt, VariantDef};
|
||||||
use rustc_mir_dataflow::impls::MaybeInitializedPlaces;
|
use rustc_mir_dataflow::impls::MaybeInitializedPlaces;
|
||||||
use rustc_mir_dataflow::move_paths::{LookupResult, MoveData, MovePathIndex};
|
use rustc_mir_dataflow::move_paths::{LookupResult, MoveData, MovePathIndex};
|
||||||
use rustc_mir_dataflow::{Analysis, MaybeReachable, move_path_children_matching};
|
use rustc_mir_dataflow::{Analysis, MaybeReachable, move_path_children_matching};
|
||||||
use rustc_target::abi::FieldIdx;
|
|
||||||
|
|
||||||
/// Removes `Drop` terminators whose target is known to be uninitialized at
|
/// Removes `Drop` terminators whose target is known to be uninitialized at
|
||||||
/// that point.
|
/// that point.
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use std::assert_matches::assert_matches;
|
use std::assert_matches::assert_matches;
|
||||||
use std::{fmt, iter};
|
use std::{fmt, iter};
|
||||||
|
|
||||||
|
use rustc_abi::{ExternAbi, FIRST_VARIANT, FieldIdx, VariantIdx};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
use rustc_hir::lang_items::LangItem;
|
use rustc_hir::lang_items::LangItem;
|
||||||
|
@ -15,8 +16,6 @@ use rustc_middle::{bug, span_bug};
|
||||||
use rustc_mir_dataflow::elaborate_drops::{self, DropElaborator, DropFlagMode, DropStyle};
|
use rustc_mir_dataflow::elaborate_drops::{self, DropElaborator, DropFlagMode, DropStyle};
|
||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::{DUMMY_SP, Span};
|
use rustc_span::{DUMMY_SP, Span};
|
||||||
use rustc_target::abi::{FIRST_VARIANT, FieldIdx, VariantIdx};
|
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use tracing::{debug, instrument};
|
use tracing::{debug, instrument};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -905,7 +904,7 @@ fn build_call_shim<'tcx>(
|
||||||
let mut body =
|
let mut body =
|
||||||
new_body(MirSource::from_instance(instance), blocks, local_decls, sig.inputs().len(), span);
|
new_body(MirSource::from_instance(instance), blocks, local_decls, sig.inputs().len(), span);
|
||||||
|
|
||||||
if let Abi::RustCall = sig.abi {
|
if let ExternAbi::RustCall = sig.abi {
|
||||||
body.spread_arg = Some(Local::new(sig.inputs().len()));
|
body.spread_arg = Some(Local::new(sig.inputs().len()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use std::iter;
|
use std::iter;
|
||||||
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
use rustc_abi::{FieldIdx, VariantIdx};
|
||||||
use rustc_ast::Mutability;
|
use rustc_ast::Mutability;
|
||||||
use rustc_const_eval::interpret;
|
use rustc_const_eval::interpret;
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
|
@ -18,7 +19,6 @@ use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
use rustc_span::source_map::respan;
|
use rustc_span::source_map::respan;
|
||||||
use rustc_span::{Span, Symbol};
|
use rustc_span::{Span, Symbol};
|
||||||
use rustc_target::abi::{FieldIdx, VariantIdx};
|
|
||||||
use rustc_target::spec::PanicStrategy;
|
use rustc_target::spec::PanicStrategy;
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use rustc_abi::{FIRST_VARIANT, FieldIdx};
|
||||||
use rustc_data_structures::flat_map_in_place::FlatMapInPlace;
|
use rustc_data_structures::flat_map_in_place::FlatMapInPlace;
|
||||||
use rustc_hir::LangItem;
|
use rustc_hir::LangItem;
|
||||||
use rustc_index::IndexVec;
|
use rustc_index::IndexVec;
|
||||||
|
@ -8,7 +9,6 @@ use rustc_middle::mir::visit::*;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||||
use rustc_mir_dataflow::value_analysis::{excluded_locals, iter_fields};
|
use rustc_mir_dataflow::value_analysis::{excluded_locals, iter_fields};
|
||||||
use rustc_target::abi::{FIRST_VARIANT, FieldIdx};
|
|
||||||
use tracing::{debug, instrument};
|
use tracing::{debug, instrument};
|
||||||
|
|
||||||
pub(super) struct ScalarReplacementOfAggregates;
|
pub(super) struct ScalarReplacementOfAggregates;
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
//! when all of their successors are unreachable. This is achieved through a
|
//! when all of their successors are unreachable. This is achieved through a
|
||||||
//! post-order traversal of the blocks.
|
//! post-order traversal of the blocks.
|
||||||
|
|
||||||
|
use rustc_abi::Size;
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
use rustc_middle::mir::interpret::Scalar;
|
use rustc_middle::mir::interpret::Scalar;
|
||||||
use rustc_middle::mir::patch::MirPatch;
|
use rustc_middle::mir::patch::MirPatch;
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::ty::{self, TyCtxt};
|
use rustc_middle::ty::{self, TyCtxt};
|
||||||
use rustc_target::abi::Size;
|
|
||||||
|
|
||||||
pub(super) struct UnreachablePropagation;
|
pub(super) struct UnreachablePropagation;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
//! Validates the MIR to ensure that invariants are upheld.
|
//! Validates the MIR to ensure that invariants are upheld.
|
||||||
|
|
||||||
|
use rustc_abi::{ExternAbi, FIRST_VARIANT, Size};
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||||
use rustc_hir::LangItem;
|
use rustc_hir::LangItem;
|
||||||
use rustc_index::IndexVec;
|
use rustc_index::IndexVec;
|
||||||
|
@ -15,8 +16,6 @@ use rustc_middle::ty::{
|
||||||
Variance,
|
Variance,
|
||||||
};
|
};
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
use rustc_target::abi::{FIRST_VARIANT, Size};
|
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use rustc_trait_selection::traits::ObligationCtxt;
|
use rustc_trait_selection::traits::ObligationCtxt;
|
||||||
use rustc_type_ir::Upcast;
|
use rustc_type_ir::Upcast;
|
||||||
|
|
||||||
|
@ -60,9 +59,9 @@ impl<'tcx> crate::MirPass<'tcx> for Validator {
|
||||||
let body_ty = tcx.type_of(def_id).skip_binder();
|
let body_ty = tcx.type_of(def_id).skip_binder();
|
||||||
let body_abi = match body_ty.kind() {
|
let body_abi = match body_ty.kind() {
|
||||||
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
|
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
|
||||||
ty::Closure(..) => Abi::RustCall,
|
ty::Closure(..) => ExternAbi::RustCall,
|
||||||
ty::CoroutineClosure(..) => Abi::RustCall,
|
ty::CoroutineClosure(..) => ExternAbi::RustCall,
|
||||||
ty::Coroutine(..) => Abi::Rust,
|
ty::Coroutine(..) => ExternAbi::Rust,
|
||||||
// No need to do MIR validation on error bodies
|
// No need to do MIR validation on error bodies
|
||||||
ty::Error(_) => return,
|
ty::Error(_) => return,
|
||||||
_ => {
|
_ => {
|
||||||
|
|
Loading…
Reference in New Issue