summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Scherer <github35764891676564198441@oli-obk.de>2019-01-30 15:51:20 +0100
committerOliver Scherer <github35764891676564198441@oli-obk.de>2019-01-30 15:51:20 +0100
commit5aa713e1c39b0e84ae9c96f99514f4981d3cea30 (patch)
treef5095305396f0beec60accb233feaf7903f8384c
parent4e0af1fee19c2ff056e20a55464c233dc30e5c92 (diff)
downloadrust-5aa713e1c39b0e84ae9c96f99514f4981d3cea30.tar.gz
Eliminate an unwrap
-rw-r--r--src/librustc_mir/interpret/eval_context.rs21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs
index 4bf84cb465f..4e66d21214b 100644
--- a/src/librustc_mir/interpret/eval_context.rs
+++ b/src/librustc_mir/interpret/eval_context.rs
@@ -320,17 +320,18 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tc
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>> {