From: Scott Olson Date: Wed, 30 Mar 2016 04:13:31 +0000 (-0600) Subject: Move substs stack management into main stack managment fns. X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=17df5cfec316d798f5cca703093a0e4a8fb2fcc8;p=rust.git Move substs stack management into main stack managment fns. --- diff --git a/src/interpreter.rs b/src/interpreter.rs index 8f450388c7b..45145e03951 100644 --- a/src/interpreter.rs +++ b/src/interpreter.rs @@ -161,7 +161,6 @@ fn print_trace(t: &T, suffix: &'static str, indent: usize) { TerminatorTarget::Block(block) => current_block = block, TerminatorTarget::Return => { self.pop_stack_frame(); - self.substs_stack.pop(); continue 'outer; } TerminatorTarget::Call => continue 'outer, @@ -172,7 +171,11 @@ fn print_trace(t: &T, suffix: &'static str, indent: usize) { Ok(()) } - fn push_stack_frame(&mut self, mir: CachedMir<'a, 'tcx>, return_ptr: Option) { + fn push_stack_frame(&mut self, mir: CachedMir<'a, 'tcx>, substs: &'tcx Substs<'tcx>, + return_ptr: Option) + { + self.substs_stack.push(substs); + let arg_tys = mir.arg_decls.iter().map(|a| a.ty); let var_tys = mir.var_decls.iter().map(|v| v.ty); let temp_tys = mir.temp_decls.iter().map(|t| t.ty); @@ -198,6 +201,7 @@ fn push_stack_frame(&mut self, mir: CachedMir<'a, 'tcx>, return_ptr: Option) @@ -315,8 +319,7 @@ fn eval_terminator(&mut self, terminator: &mir::Terminator<'tcx>) } let mir = self.load_mir(def_id); - self.substs_stack.push(substs); - self.push_stack_frame(mir, return_ptr); + self.push_stack_frame(mir, substs, return_ptr); for (i, (src, size)) in arg_srcs.into_iter().enumerate() { let dest = self.frame().locals[i]; @@ -1155,10 +1158,10 @@ fn print_allocation_tree(memory: &Memory, alloc_id: memory::AllocId) { } ty::FnDiverging => None, }; - miri.push_stack_frame(CachedMir::Ref(mir), return_ptr); - if let Err(_e) = miri.run() { - // // TODO(tsion): report error - // let err = tcx.struct_err() + let substs = miri.tcx.mk_substs(Substs::empty()); + miri.push_stack_frame(CachedMir::Ref(mir), substs, return_ptr); + if let Err(e) = miri.run() { + tcx.sess.err(&e.to_string()); } tcx.sess.abort_if_errors();