compiler: Directly use rustc_abi in const_eval

This commit is contained in:
Jubilee Young 2024-11-02 19:32:52 -07:00
parent b895bf4fdc
commit bbd18e29da
17 changed files with 29 additions and 32 deletions

View file

@ -86,7 +86,7 @@ impl<'tcx> interpret::Machine<'tcx> for DummyMachine {
fn find_mir_or_eval_fn( fn find_mir_or_eval_fn(
_ecx: &mut InterpCx<'tcx, Self>, _ecx: &mut InterpCx<'tcx, Self>,
_instance: ty::Instance<'tcx>, _instance: ty::Instance<'tcx>,
_abi: rustc_target::spec::abi::Abi, _abi: rustc_abi::ExternAbi,
_args: &[interpret::FnArg<'tcx, Self::Provenance>], _args: &[interpret::FnArg<'tcx, Self::Provenance>],
_destination: &interpret::MPlaceTy<'tcx, Self::Provenance>, _destination: &interpret::MPlaceTy<'tcx, Self::Provenance>,
_target: Option<BasicBlock>, _target: Option<BasicBlock>,

View file

@ -3,6 +3,7 @@ use std::fmt;
use std::hash::Hash; use std::hash::Hash;
use std::ops::ControlFlow; use std::ops::ControlFlow;
use rustc_abi::{Align, ExternAbi, Size};
use rustc_ast::Mutability; use rustc_ast::Mutability;
use rustc_data_structures::fx::{FxHashMap, FxIndexMap, IndexEntry}; use rustc_data_structures::fx::{FxHashMap, FxIndexMap, IndexEntry};
use rustc_hir::def_id::{DefId, LocalDefId}; use rustc_hir::def_id::{DefId, LocalDefId};
@ -14,8 +15,6 @@ use rustc_middle::ty::{self, Ty, TyCtxt};
use rustc_middle::{bug, mir}; use rustc_middle::{bug, mir};
use rustc_span::Span; use rustc_span::Span;
use rustc_span::symbol::{Symbol, sym}; use rustc_span::symbol::{Symbol, sym};
use rustc_target::abi::{Align, Size};
use rustc_target::spec::abi::Abi as CallAbi;
use tracing::debug; use tracing::debug;
use super::error::*; use super::error::*;
@ -411,7 +410,7 @@ impl<'tcx> interpret::Machine<'tcx> for CompileTimeMachine<'tcx> {
fn find_mir_or_eval_fn( fn find_mir_or_eval_fn(
ecx: &mut InterpCx<'tcx, Self>, ecx: &mut InterpCx<'tcx, Self>,
orig_instance: ty::Instance<'tcx>, orig_instance: ty::Instance<'tcx>,
_abi: CallAbi, _abi: ExternAbi,
args: &[FnArg<'tcx>], args: &[FnArg<'tcx>],
dest: &MPlaceTy<'tcx>, dest: &MPlaceTy<'tcx>,
ret: Option<mir::BasicBlock>, ret: Option<mir::BasicBlock>,

View file

@ -1,9 +1,9 @@
// Not in interpret to make sure we do not use private implementation details // Not in interpret to make sure we do not use private implementation details
use rustc_abi::VariantIdx;
use rustc_middle::query::{Key, TyCtxtAt}; use rustc_middle::query::{Key, TyCtxtAt};
use rustc_middle::ty::{self, Ty, TyCtxt}; use rustc_middle::ty::{self, Ty, TyCtxt};
use rustc_middle::{bug, mir}; use rustc_middle::{bug, mir};
use rustc_target::abi::VariantIdx;
use tracing::instrument; use tracing::instrument;
use crate::interpret::InterpCx; use crate::interpret::InterpCx;

View file

@ -2,6 +2,7 @@ use std::borrow::Cow;
use std::fmt::Write; use std::fmt::Write;
use either::Either; use either::Either;
use rustc_abi::WrappingRange;
use rustc_errors::codes::*; use rustc_errors::codes::*;
use rustc_errors::{ use rustc_errors::{
Diag, DiagArgValue, DiagCtxtHandle, DiagMessage, Diagnostic, EmissionGuarantee, Level, Diag, DiagArgValue, DiagCtxtHandle, DiagMessage, Diagnostic, EmissionGuarantee, Level,
@ -15,8 +16,7 @@ use rustc_middle::mir::interpret::{
}; };
use rustc_middle::ty::{self, Mutability, Ty}; use rustc_middle::ty::{self, Mutability, Ty};
use rustc_span::{Span, Symbol}; use rustc_span::{Span, Symbol};
use rustc_target::abi::WrappingRange; use rustc_target::callconv::AdjustForForeignAbiError;
use rustc_target::abi::call::AdjustForForeignAbiError;
use crate::interpret::InternKind; use crate::interpret::InternKind;

View file

@ -4,13 +4,12 @@ use std::assert_matches::assert_matches;
use std::borrow::Cow; use std::borrow::Cow;
use either::{Left, Right}; use either::{Left, Right};
use rustc_abi::{self as abi, ExternAbi, FieldIdx, Integer};
use rustc_middle::ty::layout::{FnAbiOf, IntegerExt, LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{FnAbiOf, IntegerExt, LayoutOf, TyAndLayout};
use rustc_middle::ty::{self, AdtDef, Instance, Ty}; use rustc_middle::ty::{self, AdtDef, Instance, Ty};
use rustc_middle::{bug, mir, span_bug}; use rustc_middle::{bug, mir, span_bug};
use rustc_span::sym; use rustc_span::sym;
use rustc_target::abi::call::{ArgAbi, FnAbi, PassMode}; use rustc_target::callconv::{ArgAbi, FnAbi, PassMode};
use rustc_target::abi::{self, FieldIdx, Integer};
use rustc_target::spec::abi::Abi;
use tracing::{info, instrument, trace}; use tracing::{info, instrument, trace};
use super::{ use super::{
@ -488,7 +487,7 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
pub(super) fn init_fn_call( pub(super) fn init_fn_call(
&mut self, &mut self,
fn_val: FnVal<'tcx, M::ExtraFnVal>, fn_val: FnVal<'tcx, M::ExtraFnVal>,
(caller_abi, caller_fn_abi): (Abi, &FnAbi<'tcx, Ty<'tcx>>), (caller_abi, caller_fn_abi): (ExternAbi, &FnAbi<'tcx, Ty<'tcx>>),
args: &[FnArg<'tcx, M::Provenance>], args: &[FnArg<'tcx, M::Provenance>],
with_caller_location: bool, with_caller_location: bool,
destination: &MPlaceTy<'tcx, M::Provenance>, destination: &MPlaceTy<'tcx, M::Provenance>,
@ -566,7 +565,7 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
// Special handling for the closure ABI: untuple the last argument. // Special handling for the closure ABI: untuple the last argument.
let args: Cow<'_, [FnArg<'tcx, M::Provenance>]> = let args: Cow<'_, [FnArg<'tcx, M::Provenance>]> =
if caller_abi == Abi::RustCall && !args.is_empty() { if caller_abi == ExternAbi::RustCall && !args.is_empty() {
// Untuple // Untuple
let (untuple_arg, args) = args.split_last().unwrap(); let (untuple_arg, args) = args.split_last().unwrap();
trace!("init_fn_call: Will pass last argument by untupling"); trace!("init_fn_call: Will pass last argument by untupling");
@ -732,7 +731,7 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
pub(super) fn init_fn_tail_call( pub(super) fn init_fn_tail_call(
&mut self, &mut self,
fn_val: FnVal<'tcx, M::ExtraFnVal>, fn_val: FnVal<'tcx, M::ExtraFnVal>,
(caller_abi, caller_fn_abi): (Abi, &FnAbi<'tcx, Ty<'tcx>>), (caller_abi, caller_fn_abi): (ExternAbi, &FnAbi<'tcx, Ty<'tcx>>),
args: &[FnArg<'tcx, M::Provenance>], args: &[FnArg<'tcx, M::Provenance>],
with_caller_location: bool, with_caller_location: bool,
) -> InterpResult<'tcx> { ) -> InterpResult<'tcx> {
@ -817,7 +816,7 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
self.init_fn_call( self.init_fn_call(
FnVal::Instance(instance), FnVal::Instance(instance),
(Abi::Rust, fn_abi), (ExternAbi::Rust, fn_abi),
&[FnArg::Copy(arg.into())], &[FnArg::Copy(arg.into())],
false, false,
&ret, &ret,

View file

@ -1,5 +1,6 @@
use std::assert_matches::assert_matches; use std::assert_matches::assert_matches;
use rustc_abi::Integer;
use rustc_apfloat::ieee::{Double, Half, Quad, Single}; use rustc_apfloat::ieee::{Double, Half, Quad, Single};
use rustc_apfloat::{Float, FloatConvert}; use rustc_apfloat::{Float, FloatConvert};
use rustc_middle::mir::CastKind; use rustc_middle::mir::CastKind;
@ -8,7 +9,6 @@ use rustc_middle::ty::adjustment::PointerCoercion;
use rustc_middle::ty::layout::{IntegerExt, LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{IntegerExt, LayoutOf, TyAndLayout};
use rustc_middle::ty::{self, FloatTy, Ty}; use rustc_middle::ty::{self, FloatTy, Ty};
use rustc_middle::{bug, span_bug}; use rustc_middle::{bug, span_bug};
use rustc_target::abi::Integer;
use rustc_type_ir::TyKind::*; use rustc_type_ir::TyKind::*;
use tracing::trace; use tracing::trace;

View file

@ -1,9 +1,9 @@
//! Functions for reading and writing discriminants of multi-variant layouts (enums and coroutines). //! Functions for reading and writing discriminants of multi-variant layouts (enums and coroutines).
use rustc_abi::{self as abi, TagEncoding, VariantIdx, Variants};
use rustc_middle::ty::layout::{LayoutOf, PrimitiveExt}; use rustc_middle::ty::layout::{LayoutOf, PrimitiveExt};
use rustc_middle::ty::{self, CoroutineArgsExt, ScalarInt, Ty}; use rustc_middle::ty::{self, CoroutineArgsExt, ScalarInt, Ty};
use rustc_middle::{mir, span_bug}; use rustc_middle::{mir, span_bug};
use rustc_target::abi::{self, TagEncoding, VariantIdx, Variants};
use tracing::{instrument, trace}; use tracing::{instrument, trace};
use super::{ use super::{

View file

@ -1,4 +1,5 @@
use either::{Left, Right}; use either::{Left, Right};
use rustc_abi::{Align, HasDataLayout, Size, TargetDataLayout};
use rustc_errors::DiagCtxtHandle; use rustc_errors::DiagCtxtHandle;
use rustc_hir::def_id::DefId; use rustc_hir::def_id::DefId;
use rustc_infer::infer::TyCtxtInferExt; use rustc_infer::infer::TyCtxtInferExt;
@ -15,8 +16,7 @@ use rustc_middle::ty::{
use rustc_middle::{mir, span_bug}; use rustc_middle::{mir, span_bug};
use rustc_session::Limit; use rustc_session::Limit;
use rustc_span::Span; use rustc_span::Span;
use rustc_target::abi::call::FnAbi; use rustc_target::callconv::FnAbi;
use rustc_target::abi::{Align, HasDataLayout, Size, TargetDataLayout};
use rustc_trait_selection::traits::ObligationCtxt; use rustc_trait_selection::traits::ObligationCtxt;
use tracing::{debug, instrument, trace}; use tracing::{debug, instrument, trace};

View file

@ -4,6 +4,7 @@
use std::assert_matches::assert_matches; use std::assert_matches::assert_matches;
use rustc_abi::Size;
use rustc_apfloat::ieee::{Double, Half, Quad, Single}; use rustc_apfloat::ieee::{Double, Half, Quad, Single};
use rustc_hir::def_id::DefId; use rustc_hir::def_id::DefId;
use rustc_middle::mir::{self, BinOp, ConstValue, NonDivergingIntrinsic}; use rustc_middle::mir::{self, BinOp, ConstValue, NonDivergingIntrinsic};
@ -11,7 +12,6 @@ use rustc_middle::ty::layout::{LayoutOf as _, TyAndLayout, ValidityRequirement};
use rustc_middle::ty::{GenericArgsRef, Ty, TyCtxt}; use rustc_middle::ty::{GenericArgsRef, Ty, TyCtxt};
use rustc_middle::{bug, ty}; use rustc_middle::{bug, ty};
use rustc_span::symbol::{Symbol, sym}; use rustc_span::symbol::{Symbol, sym};
use rustc_target::abi::Size;
use tracing::trace; use tracing::trace;
use super::memory::MemoryKind; use super::memory::MemoryKind;

View file

@ -6,6 +6,7 @@ use std::borrow::{Borrow, Cow};
use std::fmt::Debug; use std::fmt::Debug;
use std::hash::Hash; use std::hash::Hash;
use rustc_abi::{Align, ExternAbi, Size};
use rustc_apfloat::{Float, FloatConvert}; use rustc_apfloat::{Float, FloatConvert};
use rustc_ast::{InlineAsmOptions, InlineAsmTemplatePiece}; use rustc_ast::{InlineAsmOptions, InlineAsmTemplatePiece};
use rustc_middle::query::TyCtxtAt; use rustc_middle::query::TyCtxtAt;
@ -14,8 +15,6 @@ use rustc_middle::ty::layout::TyAndLayout;
use rustc_middle::{mir, ty}; use rustc_middle::{mir, ty};
use rustc_span::Span; use rustc_span::Span;
use rustc_span::def_id::DefId; use rustc_span::def_id::DefId;
use rustc_target::abi::{Align, Size};
use rustc_target::spec::abi::Abi as CallAbi;
use super::{ use super::{
AllocBytes, AllocId, AllocKind, AllocRange, Allocation, CTFE_ALLOC_SALT, ConstAllocation, AllocBytes, AllocId, AllocKind, AllocRange, Allocation, CTFE_ALLOC_SALT, ConstAllocation,
@ -202,7 +201,7 @@ pub trait Machine<'tcx>: Sized {
fn find_mir_or_eval_fn( fn find_mir_or_eval_fn(
ecx: &mut InterpCx<'tcx, Self>, ecx: &mut InterpCx<'tcx, Self>,
instance: ty::Instance<'tcx>, instance: ty::Instance<'tcx>,
abi: CallAbi, abi: ExternAbi,
args: &[FnArg<'tcx, Self::Provenance>], args: &[FnArg<'tcx, Self::Provenance>],
destination: &MPlaceTy<'tcx, Self::Provenance>, destination: &MPlaceTy<'tcx, Self::Provenance>,
target: Option<mir::BasicBlock>, target: Option<mir::BasicBlock>,
@ -214,7 +213,7 @@ pub trait Machine<'tcx>: Sized {
fn call_extra_fn( fn call_extra_fn(
ecx: &mut InterpCx<'tcx, Self>, ecx: &mut InterpCx<'tcx, Self>,
fn_val: Self::ExtraFnVal, fn_val: Self::ExtraFnVal,
abi: CallAbi, abi: ExternAbi,
args: &[FnArg<'tcx, Self::Provenance>], args: &[FnArg<'tcx, Self::Provenance>],
destination: &MPlaceTy<'tcx, Self::Provenance>, destination: &MPlaceTy<'tcx, Self::Provenance>,
target: Option<mir::BasicBlock>, target: Option<mir::BasicBlock>,
@ -653,7 +652,7 @@ pub macro compile_time_machine(<$tcx: lifetime>) {
fn call_extra_fn( fn call_extra_fn(
_ecx: &mut InterpCx<$tcx, Self>, _ecx: &mut InterpCx<$tcx, Self>,
fn_val: !, fn_val: !,
_abi: CallAbi, _abi: ExternAbi,
_args: &[FnArg<$tcx>], _args: &[FnArg<$tcx>],
_destination: &MPlaceTy<$tcx, Self::Provenance>, _destination: &MPlaceTy<$tcx, Self::Provenance>,
_target: Option<mir::BasicBlock>, _target: Option<mir::BasicBlock>,

View file

@ -11,13 +11,13 @@ use std::borrow::{Borrow, Cow};
use std::collections::VecDeque; use std::collections::VecDeque;
use std::{fmt, mem, ptr}; use std::{fmt, mem, ptr};
use rustc_abi::{Align, HasDataLayout, Size};
use rustc_ast::Mutability; use rustc_ast::Mutability;
use rustc_data_structures::fx::{FxHashSet, FxIndexMap}; use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
use rustc_hir::def::DefKind; use rustc_hir::def::DefKind;
use rustc_middle::bug; use rustc_middle::bug;
use rustc_middle::mir::display_allocation; use rustc_middle::mir::display_allocation;
use rustc_middle::ty::{self, Instance, ParamEnv, Ty, TyCtxt}; use rustc_middle::ty::{self, Instance, ParamEnv, Ty, TyCtxt};
use rustc_target::abi::{Align, HasDataLayout, Size};
use tracing::{debug, instrument, trace}; use tracing::{debug, instrument, trace};
use super::{ use super::{

View file

@ -1,4 +1,5 @@
use either::Either; use either::Either;
use rustc_abi::Size;
use rustc_apfloat::{Float, FloatConvert}; use rustc_apfloat::{Float, FloatConvert};
use rustc_middle::mir::NullOp; use rustc_middle::mir::NullOp;
use rustc_middle::mir::interpret::{InterpResult, PointerArithmetic, Scalar}; use rustc_middle::mir::interpret::{InterpResult, PointerArithmetic, Scalar};
@ -6,7 +7,6 @@ use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
use rustc_middle::ty::{self, FloatTy, ScalarInt, Ty}; use rustc_middle::ty::{self, FloatTy, ScalarInt, Ty};
use rustc_middle::{bug, mir, span_bug}; use rustc_middle::{bug, mir, span_bug};
use rustc_span::symbol::sym; use rustc_span::symbol::sym;
use rustc_target::abi::Size;
use tracing::trace; use tracing::trace;
use super::{ImmTy, InterpCx, Machine, MemPlaceMeta, interp_ok, throw_ub}; use super::{ImmTy, InterpCx, Machine, MemPlaceMeta, interp_ok, throw_ub};

View file

@ -10,10 +10,10 @@
use std::marker::PhantomData; use std::marker::PhantomData;
use std::ops::Range; use std::ops::Range;
use rustc_abi::{self as abi, Size, VariantIdx};
use rustc_middle::ty::Ty; use rustc_middle::ty::Ty;
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
use rustc_middle::{bug, mir, span_bug, ty}; use rustc_middle::{bug, mir, span_bug, ty};
use rustc_target::abi::{self, Size, VariantIdx};
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use super::{ use super::{

View file

@ -3,13 +3,13 @@
//! The main entry point is the `step` method. //! The main entry point is the `step` method.
use either::Either; use either::Either;
use rustc_abi::{FIRST_VARIANT, FieldIdx};
use rustc_index::IndexSlice; use rustc_index::IndexSlice;
use rustc_middle::ty::layout::FnAbiOf; use rustc_middle::ty::layout::FnAbiOf;
use rustc_middle::ty::{self, Instance, Ty}; use rustc_middle::ty::{self, Instance, Ty};
use rustc_middle::{bug, mir, span_bug}; use rustc_middle::{bug, mir, span_bug};
use rustc_span::source_map::Spanned; use rustc_span::source_map::Spanned;
use rustc_target::abi::call::FnAbi; use rustc_target::callconv::FnAbi;
use rustc_target::abi::{FIRST_VARIANT, FieldIdx};
use tracing::{info, instrument, trace}; use tracing::{info, instrument, trace};
use super::{ use super::{

View file

@ -1,7 +1,7 @@
use rustc_abi::{Align, Size};
use rustc_middle::mir::interpret::{InterpResult, Pointer}; use rustc_middle::mir::interpret::{InterpResult, Pointer};
use rustc_middle::ty::layout::LayoutOf; use rustc_middle::ty::layout::LayoutOf;
use rustc_middle::ty::{self, ExistentialPredicateStableCmpExt, Ty, TyCtxt, VtblEntry}; use rustc_middle::ty::{self, ExistentialPredicateStableCmpExt, Ty, TyCtxt, VtblEntry};
use rustc_target::abi::{Align, Size};
use tracing::trace; use tracing::trace;
use super::util::ensure_monomorphic_enough; use super::util::ensure_monomorphic_enough;

View file

@ -3,11 +3,11 @@
use std::num::NonZero; use std::num::NonZero;
use rustc_abi::{FieldIdx, FieldsShape, VariantIdx, Variants};
use rustc_index::IndexVec; use rustc_index::IndexVec;
use rustc_middle::mir::interpret::InterpResult; use rustc_middle::mir::interpret::InterpResult;
use rustc_middle::ty::layout::LayoutOf; use rustc_middle::ty::layout::LayoutOf;
use rustc_middle::ty::{self, Ty}; use rustc_middle::ty::{self, Ty};
use rustc_target::abi::{FieldIdx, FieldsShape, VariantIdx, Variants};
use tracing::trace; use tracing::trace;
use super::{InterpCx, MPlaceTy, Machine, Projectable, interp_ok, throw_inval}; use super::{InterpCx, MPlaceTy, Machine, Projectable, interp_ok, throw_inval};

View file

@ -1,6 +1,6 @@
use rustc_abi::Align;
use rustc_middle::mir::*; use rustc_middle::mir::*;
use rustc_middle::ty::{self, TyCtxt}; use rustc_middle::ty::{self, TyCtxt};
use rustc_target::abi::Align;
use tracing::debug; use tracing::debug;
/// Returns `true` if this place is allowed to be less aligned /// Returns `true` if this place is allowed to be less aligned