From bb6e5224da35fad23307ae0b5c17c7fc0eff63c1 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 13 Jul 2017 20:22:51 -0700 Subject: [PATCH] handle array types --- src/librustc_mir/interpret/lvalue.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/librustc_mir/interpret/lvalue.rs b/src/librustc_mir/interpret/lvalue.rs index 45dc226af14..1c7070e77b1 100644 --- a/src/librustc_mir/interpret/lvalue.rs +++ b/src/librustc_mir/interpret/lvalue.rs @@ -531,7 +531,7 @@ pub(super) fn validate(&mut self, lvalue: Lvalue<'tcx>, ty: Ty<'tcx>, mut vctx: TyBool | TyFloat(_) | TyChar | TyStr | TyRef(..) => true, TyAdt(adt, _) if adt.is_box() => true, - TyAdt(_, _) | TyTuple(..) | TyClosure(..) => false, + TySlice(_) | TyAdt(_, _) | TyTuple(..) | TyClosure(..) | TyArray(..) => false, TyParam(_) | TyInfer(_) => bug!("I got an incomplete type for validation"), _ => return Err(EvalError::Unimplemented(format!("Unimplemented type encountered when checking validity."))), }; @@ -622,6 +622,13 @@ pub(super) fn validate(&mut self, lvalue: Lvalue<'tcx>, ty: Ty<'tcx>, mut vctx: } Ok(()) } + TyArray(elem_ty, len) => { + for i in 0..len { + let inner_lvalue = self.lvalue_index(lvalue, ty, i as u64)?; + self.validate(inner_lvalue, elem_ty, vctx)?; + } + Ok(()) + } TyFnPtr(_sig) => { // TODO: The function names here could need some improvement. let ptr = self.read_lvalue(lvalue)?.into_ptr(&mut self.memory)?.to_ptr()?; -- 2.44.0