Remove extern crate rustc_middle from rustc_const_eval.

This requires exporting the interpreter macros so they can be used with
`use crate::interpret::*`.
This commit is contained in:
Nicholas Nethercote 2024-05-08 19:03:14 +10:00
parent f12e935795
commit 4497d345a8
32 changed files with 101 additions and 48 deletions

View file

@ -1,9 +1,12 @@
use crate::interpret::{self, HasStaticRootDefId, ImmTy, Immediate, InterpCx, PointerArithmetic}; use crate::interpret::{
self, throw_machine_stop, HasStaticRootDefId, ImmTy, Immediate, InterpCx, PointerArithmetic,
};
use rustc_middle::mir::interpret::{AllocId, ConstAllocation, InterpResult}; use rustc_middle::mir::interpret::{AllocId, ConstAllocation, InterpResult};
use rustc_middle::mir::*; use rustc_middle::mir::*;
use rustc_middle::query::TyCtxtAt; use rustc_middle::query::TyCtxtAt;
use rustc_middle::ty; use rustc_middle::ty;
use rustc_middle::ty::layout::TyAndLayout; use rustc_middle::ty::layout::TyAndLayout;
use rustc_middle::{bug, span_bug};
use rustc_span::def_id::DefId; use rustc_span::def_id::DefId;
/// Macro for machine-specific `InterpError` without allocation. /// Macro for machine-specific `InterpError` without allocation.

View file

@ -11,6 +11,7 @@ use rustc_span::{Span, Symbol};
use super::CompileTimeInterpreter; use super::CompileTimeInterpreter;
use crate::errors::{self, FrameNote, ReportErrorExt}; use crate::errors::{self, FrameNote, ReportErrorExt};
use crate::interpret::{err_inval, err_machine_stop};
use crate::interpret::{ErrorHandled, Frame, InterpError, InterpErrorInfo, MachineStopType}; use crate::interpret::{ErrorHandled, Frame, InterpError, InterpErrorInfo, MachineStopType};
/// The CTFE machine has some custom error kinds. /// The CTFE machine has some custom error kinds.

View file

@ -3,6 +3,7 @@ use std::sync::atomic::Ordering::Relaxed;
use either::{Left, Right}; use either::{Left, Right};
use rustc_hir::def::DefKind; use rustc_hir::def::DefKind;
use rustc_middle::bug;
use rustc_middle::mir::interpret::{AllocId, ErrorHandled, InterpErrorInfo}; use rustc_middle::mir::interpret::{AllocId, ErrorHandled, InterpErrorInfo};
use rustc_middle::mir::{self, ConstAlloc, ConstValue}; use rustc_middle::mir::{self, ConstAlloc, ConstValue};
use rustc_middle::query::TyCtxtAt; use rustc_middle::query::TyCtxtAt;
@ -24,7 +25,7 @@ use crate::interpret::{
InternKind, InterpCx, InterpError, InterpResult, MPlaceTy, MemoryKind, OpTy, RefTracking, InternKind, InterpCx, InterpError, InterpResult, MPlaceTy, MemoryKind, OpTy, RefTracking,
StackPopCleanup, StackPopCleanup,
}; };
use crate::interpret::{eval_nullary_intrinsic, InternResult}; use crate::interpret::{eval_nullary_intrinsic, throw_exhaust, InternResult};
use crate::CTRL_C_RECEIVED; use crate::CTRL_C_RECEIVED;
// Returns a pointer to where the result lives // Returns a pointer to where the result lives

View file

@ -10,6 +10,7 @@ use rustc_hir::def::DefKind;
use rustc_hir::def_id::DefId; use rustc_hir::def_id::DefId;
use rustc_hir::def_id::LocalDefId; use rustc_hir::def_id::LocalDefId;
use rustc_hir::LangItem; use rustc_hir::LangItem;
use rustc_middle::bug;
use rustc_middle::mir; use rustc_middle::mir;
use rustc_middle::mir::AssertMessage; use rustc_middle::mir::AssertMessage;
use rustc_middle::query::TyCtxtAt; use rustc_middle::query::TyCtxtAt;
@ -24,8 +25,9 @@ use rustc_target::spec::abi::Abi as CallAbi;
use crate::errors::{LongRunning, LongRunningWarn}; use crate::errors::{LongRunning, LongRunningWarn};
use crate::fluent_generated as fluent; use crate::fluent_generated as fluent;
use crate::interpret::{ use crate::interpret::{
self, compile_time_machine, AllocId, AllocRange, ConstAllocation, CtfeProvenance, FnArg, FnVal, self, compile_time_machine, err_ub, throw_exhaust, throw_inval, throw_ub_custom,
Frame, ImmTy, InterpCx, InterpResult, MPlaceTy, OpTy, Pointer, PointerArithmetic, Scalar, throw_unsup_format, AllocId, AllocRange, ConstAllocation, CtfeProvenance, FnArg, FnVal, Frame,
ImmTy, InterpCx, InterpResult, MPlaceTy, OpTy, Pointer, PointerArithmetic, Scalar,
}; };
use super::error::*; use super::error::*;

View file

@ -1,5 +1,6 @@
// 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_middle::bug;
use rustc_middle::mir; use rustc_middle::mir;
use rustc_middle::mir::interpret::InterpErrorInfo; use rustc_middle::mir::interpret::InterpErrorInfo;
use rustc_middle::query::{Key, TyCtxtAt}; use rustc_middle::query::{Key, TyCtxtAt};

View file

@ -1,4 +1,5 @@
use rustc_data_structures::stack::ensure_sufficient_stack; use rustc_data_structures::stack::ensure_sufficient_stack;
use rustc_middle::bug;
use rustc_middle::mir; use rustc_middle::mir;
use rustc_middle::mir::interpret::{EvalToValTreeResult, GlobalId}; use rustc_middle::mir::interpret::{EvalToValTreeResult, GlobalId};
use rustc_middle::ty::layout::{LayoutCx, LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{LayoutCx, LayoutOf, TyAndLayout};

View file

@ -7,11 +7,13 @@ use rustc_middle::mir::CastKind;
use rustc_middle::ty::adjustment::PointerCoercion; 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_target::abi::Integer; use rustc_target::abi::Integer;
use rustc_type_ir::TyKind::*; use rustc_type_ir::TyKind::*;
use super::{ use super::{
util::ensure_monomorphic_enough, FnVal, ImmTy, Immediate, InterpCx, Machine, OpTy, PlaceTy, err_inval, throw_ub, throw_ub_custom, util::ensure_monomorphic_enough, FnVal, ImmTy, Immediate,
InterpCx, Machine, OpTy, PlaceTy,
}; };
use crate::fluent_generated as fluent; use crate::fluent_generated as fluent;

View file

@ -1,12 +1,15 @@
//! 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_middle::mir; use rustc_middle::mir;
use rustc_middle::span_bug;
use rustc_middle::ty::layout::{LayoutOf, PrimitiveExt}; use rustc_middle::ty::layout::{LayoutOf, PrimitiveExt};
use rustc_middle::ty::{self, ScalarInt, Ty}; use rustc_middle::ty::{self, ScalarInt, Ty};
use rustc_target::abi::{self, TagEncoding}; use rustc_target::abi::{self, TagEncoding};
use rustc_target::abi::{VariantIdx, Variants}; use rustc_target::abi::{VariantIdx, Variants};
use super::{ImmTy, InterpCx, InterpResult, Machine, Readable, Scalar, Writeable}; use super::{
err_ub, throw_ub, ImmTy, InterpCx, InterpResult, Machine, Readable, Scalar, Writeable,
};
impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
/// Writes the discriminant of the given variant. /// Writes the discriminant of the given variant.

View file

@ -17,15 +17,17 @@ use rustc_middle::ty::layout::{
TyAndLayout, TyAndLayout,
}; };
use rustc_middle::ty::{self, GenericArgsRef, ParamEnv, Ty, TyCtxt, TypeFoldable, Variance}; use rustc_middle::ty::{self, GenericArgsRef, ParamEnv, Ty, TyCtxt, TypeFoldable, Variance};
use rustc_middle::{bug, span_bug};
use rustc_mir_dataflow::storage::always_storage_live_locals; use rustc_mir_dataflow::storage::always_storage_live_locals;
use rustc_session::Limit; use rustc_session::Limit;
use rustc_span::Span; use rustc_span::Span;
use rustc_target::abi::{call::FnAbi, Align, HasDataLayout, Size, TargetDataLayout}; use rustc_target::abi::{call::FnAbi, Align, HasDataLayout, Size, TargetDataLayout};
use super::{ use super::{
GlobalId, Immediate, InterpErrorInfo, InterpResult, MPlaceTy, Machine, MemPlace, MemPlaceMeta, err_inval, throw_inval, throw_ub, throw_ub_custom, throw_unsup, GlobalId, Immediate,
Memory, MemoryKind, OpTy, Operand, Place, PlaceTy, Pointer, PointerArithmetic, Projectable, InterpErrorInfo, InterpResult, MPlaceTy, Machine, MemPlace, MemPlaceMeta, Memory, MemoryKind,
Provenance, Scalar, StackPopJump, OpTy, Operand, Place, PlaceTy, Pointer, PointerArithmetic, Projectable, Provenance, Scalar,
StackPopJump,
}; };
use crate::errors; use crate::errors;
use crate::util; use crate::util;

View file

@ -24,7 +24,7 @@ use rustc_middle::ty::layout::TyAndLayout;
use rustc_span::def_id::LocalDefId; use rustc_span::def_id::LocalDefId;
use rustc_span::sym; use rustc_span::sym;
use super::{AllocId, Allocation, InterpCx, MPlaceTy, Machine, MemoryKind, PlaceTy}; use super::{err_ub, AllocId, Allocation, InterpCx, MPlaceTy, Machine, MemoryKind, PlaceTy};
use crate::const_eval; use crate::const_eval;
use crate::errors::NestedStaticInThreadLocal; use crate::errors::NestedStaticInThreadLocal;

View file

@ -8,6 +8,7 @@ use rustc_middle::ty::layout::{LayoutOf as _, ValidityRequirement};
use rustc_middle::ty::GenericArgsRef; use rustc_middle::ty::GenericArgsRef;
use rustc_middle::ty::{Ty, TyCtxt}; use rustc_middle::ty::{Ty, TyCtxt};
use rustc_middle::{ use rustc_middle::{
bug,
mir::{self, BinOp, ConstValue, NonDivergingIntrinsic}, mir::{self, BinOp, ConstValue, NonDivergingIntrinsic},
ty::layout::TyAndLayout, ty::layout::TyAndLayout,
}; };
@ -15,9 +16,10 @@ use rustc_span::symbol::{sym, Symbol};
use rustc_target::abi::Size; use rustc_target::abi::Size;
use super::{ use super::{
memory::MemoryKind, util::ensure_monomorphic_enough, Allocation, CheckInAllocMsg, err_inval, err_ub_custom, err_unsup_format, memory::MemoryKind, throw_inval, throw_ub_custom,
ConstAllocation, GlobalId, ImmTy, InterpCx, InterpResult, MPlaceTy, Machine, OpTy, Pointer, throw_ub_format, util::ensure_monomorphic_enough, Allocation, CheckInAllocMsg, ConstAllocation,
PointerArithmetic, Scalar, GlobalId, ImmTy, InterpCx, InterpResult, MPlaceTy, Machine, OpTy, Pointer, PointerArithmetic,
Scalar,
}; };
use crate::fluent_generated as fluent; use crate::fluent_generated as fluent;

View file

@ -18,9 +18,9 @@ use rustc_target::abi::{Align, Size};
use rustc_target::spec::abi::Abi as CallAbi; use rustc_target::spec::abi::Abi as CallAbi;
use super::{ use super::{
AllocBytes, AllocId, AllocKind, AllocRange, Allocation, ConstAllocation, CtfeProvenance, FnArg, throw_unsup, throw_unsup_format, AllocBytes, AllocId, AllocKind, AllocRange, Allocation,
Frame, ImmTy, InterpCx, InterpResult, MPlaceTy, MemoryKind, Misalignment, OpTy, PlaceTy, ConstAllocation, CtfeProvenance, FnArg, Frame, ImmTy, InterpCx, InterpResult, MPlaceTy,
Pointer, Provenance, MemoryKind, Misalignment, OpTy, PlaceTy, Pointer, Provenance,
}; };
/// Data returned by Machine::stack_pop, /// Data returned by Machine::stack_pop,

View file

@ -16,6 +16,7 @@ use std::ptr;
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::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 rustc_target::abi::{Align, HasDataLayout, Size};
@ -23,9 +24,10 @@ use rustc_target::abi::{Align, HasDataLayout, Size};
use crate::fluent_generated as fluent; use crate::fluent_generated as fluent;
use super::{ use super::{
alloc_range, AllocBytes, AllocId, AllocMap, AllocRange, Allocation, CheckAlignMsg, alloc_range, err_ub, err_ub_custom, throw_ub, throw_ub_custom, throw_unsup, throw_unsup_format,
CheckInAllocMsg, CtfeProvenance, GlobalAlloc, InterpCx, InterpResult, Machine, MayLeak, AllocBytes, AllocId, AllocMap, AllocRange, Allocation, CheckAlignMsg, CheckInAllocMsg,
Misalignment, Pointer, PointerArithmetic, Provenance, Scalar, CtfeProvenance, GlobalAlloc, InterpCx, InterpResult, Machine, MayLeak, Misalignment, Pointer,
PointerArithmetic, Provenance, Scalar,
}; };
#[derive(Debug, PartialEq, Copy, Clone)] #[derive(Debug, PartialEq, Copy, Clone)]

View file

@ -10,13 +10,14 @@ use rustc_middle::mir::interpret::ScalarSizeMismatch;
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
use rustc_middle::ty::print::{FmtPrinter, PrettyPrinter}; use rustc_middle::ty::print::{FmtPrinter, PrettyPrinter};
use rustc_middle::ty::{ConstInt, ScalarInt, Ty, TyCtxt}; use rustc_middle::ty::{ConstInt, ScalarInt, Ty, TyCtxt};
use rustc_middle::{bug, span_bug};
use rustc_middle::{mir, ty}; use rustc_middle::{mir, ty};
use rustc_target::abi::{self, Abi, HasDataLayout, Size}; use rustc_target::abi::{self, Abi, HasDataLayout, Size};
use super::{ use super::{
alloc_range, from_known_layout, mir_assign_valid_types, CtfeProvenance, InterpCx, InterpResult, alloc_range, err_ub, from_known_layout, mir_assign_valid_types, throw_ub, CtfeProvenance,
MPlaceTy, Machine, MemPlace, MemPlaceMeta, OffsetMode, PlaceTy, Pointer, Projectable, InterpCx, InterpResult, MPlaceTy, Machine, MemPlace, MemPlaceMeta, OffsetMode, PlaceTy,
Provenance, Scalar, Pointer, Projectable, Provenance, Scalar,
}; };
/// An `Immediate` represents a single immediate self-contained Rust value. /// An `Immediate` represents a single immediate self-contained Rust value.

View file

@ -3,10 +3,11 @@ use rustc_middle::mir;
use rustc_middle::mir::interpret::{InterpResult, Scalar}; use rustc_middle::mir::interpret::{InterpResult, Scalar};
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout}; 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, span_bug};
use rustc_span::symbol::sym; use rustc_span::symbol::sym;
use rustc_target::abi::Abi; use rustc_target::abi::Abi;
use super::{ImmTy, Immediate, InterpCx, Machine, PlaceTy}; use super::{err_ub, throw_ub, throw_ub_custom, ImmTy, Immediate, InterpCx, Machine, PlaceTy};
use crate::fluent_generated as fluent; use crate::fluent_generated as fluent;

View file

@ -11,12 +11,14 @@ use rustc_middle::mir;
use rustc_middle::ty; use rustc_middle::ty;
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
use rustc_middle::ty::Ty; use rustc_middle::ty::Ty;
use rustc_middle::{bug, span_bug};
use rustc_target::abi::{Abi, Align, HasDataLayout, Size}; use rustc_target::abi::{Abi, Align, HasDataLayout, Size};
use super::{ use super::{
alloc_range, mir_assign_valid_types, AllocRef, AllocRefMut, CheckAlignMsg, CtfeProvenance, alloc_range, mir_assign_valid_types, throw_ub, AllocRef, AllocRefMut, CheckAlignMsg,
ImmTy, Immediate, InterpCx, InterpResult, Machine, MemoryKind, Misalignment, OffsetMode, OpTy, CtfeProvenance, ImmTy, Immediate, InterpCx, InterpResult, Machine, MemoryKind, Misalignment,
Operand, Pointer, PointerArithmetic, Projectable, Provenance, Readable, Scalar, OffsetMode, OpTy, Operand, Pointer, PointerArithmetic, Projectable, Provenance, Readable,
Scalar,
}; };
#[derive(Copy, Clone, Hash, PartialEq, Eq, Debug)] #[derive(Copy, Clone, Hash, PartialEq, Eq, Debug)]

View file

@ -14,10 +14,14 @@ use rustc_middle::mir;
use rustc_middle::ty; use rustc_middle::ty;
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout}; use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
use rustc_middle::ty::Ty; use rustc_middle::ty::Ty;
use rustc_middle::{bug, span_bug};
use rustc_target::abi::Size; use rustc_target::abi::Size;
use rustc_target::abi::{self, VariantIdx}; use rustc_target::abi::{self, VariantIdx};
use super::{InterpCx, InterpResult, MPlaceTy, Machine, MemPlaceMeta, OpTy, Provenance, Scalar}; use super::{
throw_ub, throw_unsup_format, InterpCx, InterpResult, MPlaceTy, Machine, MemPlaceMeta, OpTy,
Provenance, Scalar,
};
/// Describes the constraints placed on offset-projections. /// Describes the constraints placed on offset-projections.
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]

View file

@ -7,6 +7,7 @@ use either::Either;
use rustc_index::IndexSlice; use rustc_index::IndexSlice;
use rustc_middle::mir; use rustc_middle::mir;
use rustc_middle::ty::layout::LayoutOf; use rustc_middle::ty::layout::LayoutOf;
use rustc_middle::{bug, span_bug};
use rustc_target::abi::{FieldIdx, FIRST_VARIANT}; use rustc_target::abi::{FieldIdx, FIRST_VARIANT};
use super::{ use super::{

View file

@ -2,6 +2,7 @@ use std::borrow::Cow;
use either::Either; use either::Either;
use rustc_middle::span_bug;
use rustc_middle::{ use rustc_middle::{
mir, mir,
ty::{ ty::{
@ -19,8 +20,9 @@ use rustc_target::abi::{
use rustc_target::spec::abi::Abi; use rustc_target::spec::abi::Abi;
use super::{ use super::{
CtfeProvenance, FnVal, ImmTy, InterpCx, InterpResult, MPlaceTy, Machine, OpTy, PlaceTy, throw_ub, throw_ub_custom, throw_unsup_format, CtfeProvenance, FnVal, ImmTy, InterpCx,
Projectable, Provenance, Scalar, StackPopCleanup, InterpResult, MPlaceTy, Machine, OpTy, PlaceTy, Projectable, Provenance, Scalar,
StackPopCleanup,
}; };
use crate::fluent_generated as fluent; use crate::fluent_generated as fluent;

View file

@ -1,5 +1,4 @@
use crate::const_eval::{CompileTimeEvalContext, CompileTimeInterpreter, InterpretationResult}; use crate::const_eval::{CompileTimeEvalContext, CompileTimeInterpreter, InterpretationResult};
use crate::interpret::{MemPlaceMeta, MemoryKind};
use rustc_hir::def_id::LocalDefId; use rustc_hir::def_id::LocalDefId;
use rustc_middle::mir; use rustc_middle::mir;
use rustc_middle::mir::interpret::{Allocation, InterpResult, Pointer}; use rustc_middle::mir::interpret::{Allocation, InterpResult, Pointer};
@ -9,7 +8,7 @@ use rustc_middle::ty::{
}; };
use std::ops::ControlFlow; use std::ops::ControlFlow;
use super::{InterpCx, MPlaceTy}; use super::{throw_inval, InterpCx, MPlaceTy, MemPlaceMeta, MemoryKind};
/// Checks whether a type contains generic parameters which must be instantiated. /// Checks whether a type contains generic parameters which must be instantiated.
/// ///

View file

@ -13,6 +13,7 @@ use hir::def::DefKind;
use rustc_ast::Mutability; use rustc_ast::Mutability;
use rustc_data_structures::fx::FxHashSet; use rustc_data_structures::fx::FxHashSet;
use rustc_hir as hir; use rustc_hir as hir;
use rustc_middle::bug;
use rustc_middle::mir::interpret::{ use rustc_middle::mir::interpret::{
ExpectedKind, InterpError, InvalidMetaKind, Misalignment, PointerKind, Provenance, ExpectedKind, InterpError, InvalidMetaKind, Misalignment, PointerKind, Provenance,
ValidationErrorInfo, ValidationErrorKind, ValidationErrorKind::*, ValidationErrorInfo, ValidationErrorKind, ValidationErrorKind::*,
@ -27,9 +28,9 @@ use rustc_target::abi::{
use std::hash::Hash; use std::hash::Hash;
use super::{ use super::{
format_interp_error, machine::AllocMap, AllocId, CheckInAllocMsg, GlobalAlloc, ImmTy, err_ub, format_interp_error, machine::AllocMap, throw_ub, AllocId, CheckInAllocMsg,
Immediate, InterpCx, InterpResult, MPlaceTy, Machine, MemPlaceMeta, OpTy, Pointer, Projectable, GlobalAlloc, ImmTy, Immediate, InterpCx, InterpResult, MPlaceTy, Machine, MemPlaceMeta, OpTy,
Scalar, ValueVisitor, Pointer, Projectable, Scalar, ValueVisitor,
}; };
// for the validation errors // for the validation errors

View file

@ -9,7 +9,7 @@ use rustc_target::abi::{FieldsShape, VariantIdx, Variants};
use std::num::NonZero; use std::num::NonZero;
use super::{InterpCx, MPlaceTy, Machine, Projectable}; use super::{throw_inval, InterpCx, MPlaceTy, Machine, Projectable};
/// How to traverse a value and what to do when we are at the leaves. /// How to traverse a value and what to do when we are at the leaves.
pub trait ValueVisitor<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>>: Sized { pub trait ValueVisitor<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>>: Sized {

View file

@ -22,8 +22,6 @@ Rust MIR: a lowered representation of Rust.
#[macro_use] #[macro_use]
extern crate tracing; extern crate tracing;
#[macro_use]
extern crate rustc_middle;
pub mod const_eval; pub mod const_eval;
mod errors; mod errors;

View file

@ -8,6 +8,7 @@ use rustc_infer::infer::TyCtxtInferExt;
use rustc_infer::traits::ObligationCause; use rustc_infer::traits::ObligationCause;
use rustc_middle::mir::visit::{MutatingUseContext, NonMutatingUseContext, PlaceContext, Visitor}; use rustc_middle::mir::visit::{MutatingUseContext, NonMutatingUseContext, PlaceContext, Visitor};
use rustc_middle::mir::*; use rustc_middle::mir::*;
use rustc_middle::span_bug;
use rustc_middle::ty::{self, adjustment::PointerCoercion, Ty, TyCtxt}; use rustc_middle::ty::{self, adjustment::PointerCoercion, Ty, TyCtxt};
use rustc_middle::ty::{Instance, InstanceDef, TypeVisitableExt}; use rustc_middle::ty::{Instance, InstanceDef, TypeVisitableExt};
use rustc_mir_dataflow::Analysis; use rustc_mir_dataflow::Analysis;

View file

@ -8,6 +8,7 @@ use rustc_attr as attr;
use rustc_errors::DiagCtxt; use rustc_errors::DiagCtxt;
use rustc_hir as hir; use rustc_hir as hir;
use rustc_hir::def_id::{DefId, LocalDefId}; use rustc_hir::def_id::{DefId, LocalDefId};
use rustc_middle::bug;
use rustc_middle::mir; use rustc_middle::mir;
use rustc_middle::ty::{self, PolyFnSig, TyCtxt}; use rustc_middle::ty::{self, PolyFnSig, TyCtxt};
use rustc_span::Symbol; use rustc_span::Symbol;

View file

@ -8,6 +8,7 @@ use rustc_hir::def_id::DefId;
use rustc_infer::infer::TyCtxtInferExt; use rustc_infer::infer::TyCtxtInferExt;
use rustc_infer::traits::{ImplSource, Obligation, ObligationCause}; use rustc_infer::traits::{ImplSource, Obligation, ObligationCause};
use rustc_middle::mir::{self, CallSource}; use rustc_middle::mir::{self, CallSource};
use rustc_middle::span_bug;
use rustc_middle::ty::print::{with_no_trimmed_paths, PrintTraitRefExt as _}; use rustc_middle::ty::print::{with_no_trimmed_paths, PrintTraitRefExt as _};
use rustc_middle::ty::{ use rustc_middle::ty::{
self, suggest_constraining_type_param, Closure, FnDef, FnPtr, GenericArgKind, GenericArgsRef, self, suggest_constraining_type_param, Closure, FnDef, FnPtr, GenericArgKind, GenericArgsRef,

View file

@ -5,6 +5,7 @@
use rustc_errors::ErrorGuaranteed; use rustc_errors::ErrorGuaranteed;
use rustc_hir::LangItem; use rustc_hir::LangItem;
use rustc_infer::infer::TyCtxtInferExt; use rustc_infer::infer::TyCtxtInferExt;
use rustc_middle::bug;
use rustc_middle::mir; use rustc_middle::mir;
use rustc_middle::mir::*; use rustc_middle::mir::*;
use rustc_middle::traits::BuiltinImplSource; use rustc_middle::traits::BuiltinImplSource;

View file

@ -9,6 +9,7 @@ use rustc_middle::mir::interpret::Scalar;
use rustc_middle::mir::visit::{NonUseContext, PlaceContext, Visitor}; use rustc_middle::mir::visit::{NonUseContext, PlaceContext, Visitor};
use rustc_middle::mir::*; use rustc_middle::mir::*;
use rustc_middle::ty::{self, InstanceDef, ParamEnv, Ty, TyCtxt, TypeVisitableExt, Variance}; use rustc_middle::ty::{self, InstanceDef, ParamEnv, Ty, TyCtxt, TypeVisitableExt, Variance};
use rustc_middle::{bug, span_bug};
use rustc_target::abi::{Size, FIRST_VARIANT}; use rustc_target::abi::{Size, FIRST_VARIANT};
use rustc_target::spec::abi::Abi; use rustc_target::spec::abi::Abi;

View file

@ -1,4 +1,5 @@
use rustc_hir::LangItem; use rustc_hir::LangItem;
use rustc_middle::bug;
use rustc_middle::mir; use rustc_middle::mir;
use rustc_middle::query::TyCtxtAt; use rustc_middle::query::TyCtxtAt;
use rustc_middle::ty::layout::LayoutOf; use rustc_middle::ty::layout::LayoutOf;

View file

@ -1,3 +1,4 @@
use rustc_middle::bug;
use rustc_middle::ty::layout::{LayoutCx, LayoutError, LayoutOf, TyAndLayout, ValidityRequirement}; use rustc_middle::ty::layout::{LayoutCx, LayoutError, LayoutOf, TyAndLayout, ValidityRequirement};
use rustc_middle::ty::{ParamEnv, ParamEnvAnd, Ty, TyCtxt}; use rustc_middle::ty::{ParamEnv, ParamEnvAnd, Ty, TyCtxt};
use rustc_target::abi::{Abi, FieldsShape, Scalar, Variants}; use rustc_target::abi::{Abi, FieldsShape, Scalar, Variants};

View file

@ -1,6 +1,7 @@
use rustc_data_structures::intern::Interned; use rustc_data_structures::intern::Interned;
use rustc_hir::def_id::CrateNum; use rustc_hir::def_id::CrateNum;
use rustc_hir::definitions::DisambiguatedDefPathData; use rustc_hir::definitions::DisambiguatedDefPathData;
use rustc_middle::bug;
use rustc_middle::ty::{ use rustc_middle::ty::{
self, self,
print::{PrettyPrinter, Print, PrintError, Printer}, print::{PrettyPrinter, Print, PrintError, Printer},

View file

@ -8,11 +8,13 @@ macro_rules! err_unsup {
) )
}; };
} }
pub use err_unsup;
#[macro_export] #[macro_export]
macro_rules! err_unsup_format { macro_rules! err_unsup_format {
($($tt:tt)*) => { err_unsup!(Unsupported(format!($($tt)*))) }; ($($tt:tt)*) => { $crate::err_unsup!(Unsupported(format!($($tt)*))) };
} }
pub use err_unsup_format;
#[macro_export] #[macro_export]
macro_rules! err_inval { macro_rules! err_inval {
@ -22,6 +24,7 @@ macro_rules! err_inval {
) )
}; };
} }
pub use err_inval;
#[macro_export] #[macro_export]
macro_rules! err_ub { macro_rules! err_ub {
@ -31,11 +34,13 @@ macro_rules! err_ub {
) )
}; };
} }
pub use err_ub;
#[macro_export] #[macro_export]
macro_rules! err_ub_format { macro_rules! err_ub_format {
($($tt:tt)*) => { err_ub!(Ub(format!($($tt)*))) }; ($($tt:tt)*) => { err_ub!(Ub(format!($($tt)*))) };
} }
pub use err_ub_format;
#[macro_export] #[macro_export]
macro_rules! err_exhaust { macro_rules! err_exhaust {
@ -45,6 +50,7 @@ macro_rules! err_exhaust {
) )
}; };
} }
pub use err_exhaust;
#[macro_export] #[macro_export]
macro_rules! err_machine_stop { macro_rules! err_machine_stop {
@ -52,42 +58,50 @@ macro_rules! err_machine_stop {
$crate::mir::interpret::InterpError::MachineStop(Box::new($($tt)*)) $crate::mir::interpret::InterpError::MachineStop(Box::new($($tt)*))
}; };
} }
pub use err_machine_stop;
// In the `throw_*` macros, avoid `return` to make them work with `try {}`. // In the `throw_*` macros, avoid `return` to make them work with `try {}`.
#[macro_export] #[macro_export]
macro_rules! throw_unsup { macro_rules! throw_unsup {
($($tt:tt)*) => { do yeet err_unsup!($($tt)*) }; ($($tt:tt)*) => { do yeet $crate::err_unsup!($($tt)*) };
} }
pub use throw_unsup;
#[macro_export] #[macro_export]
macro_rules! throw_unsup_format { macro_rules! throw_unsup_format {
($($tt:tt)*) => { throw_unsup!(Unsupported(format!($($tt)*))) }; ($($tt:tt)*) => { $crate::throw_unsup!(Unsupported(format!($($tt)*))) };
} }
pub use throw_unsup_format;
#[macro_export] #[macro_export]
macro_rules! throw_inval { macro_rules! throw_inval {
($($tt:tt)*) => { do yeet err_inval!($($tt)*) }; ($($tt:tt)*) => { do yeet $crate::err_inval!($($tt)*) };
} }
pub use throw_inval;
#[macro_export] #[macro_export]
macro_rules! throw_ub { macro_rules! throw_ub {
($($tt:tt)*) => { do yeet err_ub!($($tt)*) }; ($($tt:tt)*) => { do yeet $crate::err_ub!($($tt)*) };
} }
pub use throw_ub;
#[macro_export] #[macro_export]
macro_rules! throw_ub_format { macro_rules! throw_ub_format {
($($tt:tt)*) => { throw_ub!(Ub(format!($($tt)*))) }; ($($tt:tt)*) => { $crate::throw_ub!(Ub(format!($($tt)*))) };
} }
pub use throw_ub_format;
#[macro_export] #[macro_export]
macro_rules! throw_exhaust { macro_rules! throw_exhaust {
($($tt:tt)*) => { do yeet err_exhaust!($($tt)*) }; ($($tt:tt)*) => { do yeet $crate::err_exhaust!($($tt)*) };
} }
pub use throw_exhaust;
#[macro_export] #[macro_export]
macro_rules! throw_machine_stop { macro_rules! throw_machine_stop {
($($tt:tt)*) => { do yeet err_machine_stop!($($tt)*) }; ($($tt:tt)*) => { do yeet $crate::err_machine_stop!($($tt)*) };
} }
pub use throw_machine_stop;
#[macro_export] #[macro_export]
macro_rules! err_ub_custom { macro_rules! err_ub_custom {
@ -95,8 +109,8 @@ macro_rules! err_ub_custom {
$( $(
let ($($name,)*) = ($($value,)*); let ($($name,)*) = ($($value,)*);
)? )?
err_ub!(Custom( $crate::err_ub!(Custom(
rustc_middle::error::CustomSubdiagnostic { $crate::error::CustomSubdiagnostic {
msg: || $msg, msg: || $msg,
add_args: Box::new(move |mut set_arg| { add_args: Box::new(move |mut set_arg| {
$($( $($(
@ -107,11 +121,13 @@ macro_rules! err_ub_custom {
)) ))
}}; }};
} }
pub use err_ub_custom;
#[macro_export] #[macro_export]
macro_rules! throw_ub_custom { macro_rules! throw_ub_custom {
($($tt:tt)*) => { do yeet err_ub_custom!($($tt)*) }; ($($tt:tt)*) => { do yeet $crate::err_ub_custom!($($tt)*) };
} }
pub use throw_ub_custom;
mod allocation; mod allocation;
mod error; mod error;