use rustc_middle::mir;
use rustc_middle::ty::{self, Ty};
use rustc_span::def_id::DefId;
+use rustc_target::abi::Size;
use super::{
AllocId, Allocation, AllocationExtra, CheckInAllocMsg, Frame, ImmTy, InterpCx, InterpResult,
Ok(())
}
+ /// Called after initializing static memory using the interpreter.
+ fn after_static_mem_initialized(
+ _ecx: &mut InterpCx<'mir, 'tcx, Self>,
+ _ptr: Pointer<Self::PointerTag>,
+ _size: Size
+ ) -> InterpResult<'tcx> {
+ Ok(())
+ }
+
/// Executes a retagging operation
#[inline]
fn retag(
// If you touch this code, be sure to also make the corresponding changes to
// `get_vtable` in `rust_codegen_llvm/meth.rs`.
// /////////////////////////////////////////////////////////////////////////////////////////
+ let vtable_size = ptr_size * u64::try_from(methods.len()).unwrap().checked_add(3).unwrap();
let vtable = self.memory.allocate(
- ptr_size * u64::try_from(methods.len()).unwrap().checked_add(3).unwrap(),
+ vtable_size,
ptr_align,
MemoryKind::Vtable,
);
}
}
+ M::after_static_mem_initialized(self, vtable, vtable_size)?;
+
self.memory.mark_immutable(vtable.alloc_id)?;
assert!(self.vtables.insert((ty, poly_trait_ref), vtable).is_none());