Rollup merge of #62158 - christianpoveda:ecx-memory-extra, r=RalfJung
Add MemoryExtra in InterpretCx constructor params This is to avoid modifying `MemoryExtra` inside `InterpretCx` after initialization. Related miri PR: https://github.com/rust-lang/miri/pull/792 r? @RalfJung
This commit is contained in:
commit
b41a62ef69
@ -47,7 +47,7 @@ pub(crate) fn mk_eval_cx<'mir, 'tcx>(
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
) -> CompileTimeEvalContext<'mir, 'tcx> {
|
||||
debug!("mk_eval_cx: {:?}", param_env);
|
||||
InterpCx::new(tcx.at(span), param_env, CompileTimeInterpreter::new())
|
||||
InterpCx::new(tcx.at(span), param_env, CompileTimeInterpreter::new(), Default::default())
|
||||
}
|
||||
|
||||
pub(crate) fn eval_promoted<'mir, 'tcx>(
|
||||
@ -632,7 +632,12 @@ pub fn const_eval_raw_provider<'tcx>(
|
||||
}
|
||||
|
||||
let span = tcx.def_span(cid.instance.def_id());
|
||||
let mut ecx = InterpCx::new(tcx.at(span), key.param_env, CompileTimeInterpreter::new());
|
||||
let mut ecx = InterpCx::new(
|
||||
tcx.at(span),
|
||||
key.param_env,
|
||||
CompileTimeInterpreter::new(),
|
||||
Default::default()
|
||||
);
|
||||
|
||||
let res = ecx.load_mir(cid.instance.def);
|
||||
res.map(|body| {
|
||||
|
@ -196,12 +196,17 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> LayoutOf for InterpCx<'mir, 'tcx, M> {
|
||||
}
|
||||
|
||||
impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||
pub fn new(tcx: TyCtxtAt<'tcx>, param_env: ty::ParamEnv<'tcx>, machine: M) -> Self {
|
||||
pub fn new(
|
||||
tcx: TyCtxtAt<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
machine: M,
|
||||
memory_extra: M::MemoryExtra,
|
||||
) -> Self {
|
||||
InterpCx {
|
||||
machine,
|
||||
tcx,
|
||||
param_env,
|
||||
memory: Memory::new(tcx),
|
||||
memory: Memory::new(tcx, memory_extra),
|
||||
stack: Vec::new(),
|
||||
vtables: FxHashMap::default(),
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ pub trait Machine<'mir, 'tcx>: Sized {
|
||||
/// Extra data stored in memory. A reference to this is available when `AllocExtra`
|
||||
/// gets initialized, so you can e.g., have an `Rc` here if there is global state you
|
||||
/// need access to in the `AllocExtra` hooks.
|
||||
type MemoryExtra: Default;
|
||||
type MemoryExtra;
|
||||
|
||||
/// Extra data stored in every allocation.
|
||||
type AllocExtra: AllocationExtra<Self::PointerTag> + 'static;
|
||||
|
@ -106,11 +106,11 @@ where
|
||||
}
|
||||
|
||||
impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> {
|
||||
pub fn new(tcx: TyCtxtAt<'tcx>) -> Self {
|
||||
pub fn new(tcx: TyCtxtAt<'tcx>, extra: M::MemoryExtra) -> Self {
|
||||
Memory {
|
||||
alloc_map: M::MemoryMap::default(),
|
||||
dead_alloc_map: FxHashMap::default(),
|
||||
extra: M::MemoryExtra::default(),
|
||||
extra,
|
||||
tcx,
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user