From dd99f58fe15134b42c6f74225107a08f267046f2 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Tue, 15 Mar 2016 16:59:48 +0100 Subject: [PATCH] assigning a (MIR) box into an lvalue allocates heap storage that will need to be initialized. create a MoveOut to represent that deref'ed `*lval` path. --- src/librustc_borrowck/borrowck/mir/gather_moves.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/librustc_borrowck/borrowck/mir/gather_moves.rs b/src/librustc_borrowck/borrowck/mir/gather_moves.rs index a524a03f0f5..17a016a3ae3 100644 --- a/src/librustc_borrowck/borrowck/mir/gather_moves.rs +++ b/src/librustc_borrowck/borrowck/mir/gather_moves.rs @@ -554,7 +554,11 @@ fn gather_moves<'tcx>(mir: &Mir<'tcx>, tcx: &ty::TyCtxt<'tcx>) -> MoveData<'tcx> Rvalue::Box(ref _ty) => { // this is creating uninitialized // memory that needs to be initialized. - bb_ctxt.on_move_out_lval(SK::Box, lval, source); + let deref_lval = Lvalue::Projection(Box::new( repr::Projection { + base: lval.clone(), + elem: repr::ProjectionElem::Deref, + })); + bb_ctxt.on_move_out_lval(SK::Box, &deref_lval, source); } Rvalue::Aggregate(ref _kind, ref operands) => { for operand in operands {