local: mir::Local,
layout: Option<TyLayout<'tcx>>,
) -> EvalResult<'tcx, TyLayout<'tcx>> {
- let cell = &frame.locals[local].layout;
- if cell.get().is_none() {
- let layout = ::interpret::operand::from_known_layout(layout, || {
- let local_ty = frame.mir.local_decls[local].ty;
- let local_ty = self.monomorphize_with_substs(local_ty, frame.instance.substs);
- self.layout_of(local_ty)
- })?;
- cell.set(Some(layout));
+ match frame.locals[local].layout.get() {
+ None => {
+ let layout = ::interpret::operand::from_known_layout(layout, || {
+ let local_ty = frame.mir.local_decls[local].ty;
+ let local_ty = self.monomorphize_with_substs(local_ty, frame.instance.substs);
+ self.layout_of(local_ty)
+ })?;
+ frame.locals[local].layout.set(Some(layout));
+ Ok(layout)
+ }
+ Some(layout) => Ok(layout),
}
-
- Ok(cell.get().unwrap())
}
pub fn str_to_immediate(&mut self, s: &str) -> EvalResult<'tcx, Immediate<M::PointerTag>> {