From 2508f17ac2d8c645ab8127cea87c8e3e77d1053a Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Tue, 10 Dec 2019 20:40:29 -0300 Subject: [PATCH] Promote `Repeat`s to constants instead of statics --- src/librustc_mir/transform/promote_consts.rs | 23 ++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/librustc_mir/transform/promote_consts.rs b/src/librustc_mir/transform/promote_consts.rs index f8851f7dbdc..e160e922f4c 100644 --- a/src/librustc_mir/transform/promote_consts.rs +++ b/src/librustc_mir/transform/promote_consts.rs @@ -1002,10 +1002,25 @@ fn promote_candidate( StatementKind::Assign(box (_, Rvalue::Repeat(ref mut operand, _))) => { let ty = operand.ty(local_decls, self.tcx); let span = statement.source_info.span; - Rvalue::Use(mem::replace( - operand, - Operand::Copy(promoted_place(ty, span)), - )) + + promoted.span = span; + promoted.local_decls[RETURN_PLACE] = + LocalDecl::new_return_place(ty, span); + + let promoted_operand = Operand::Constant(Box::new(Constant { + span, + user_ty: None, + literal: tcx.mk_const(ty::Const { + ty, + val: ty::ConstKind::Unevaluated( + def_id, + InternalSubsts::identity_for_item(tcx, def_id), + Some(promoted_id), + ), + }), + })); + + Rvalue::Use(mem::replace(operand, promoted_operand)) } _ => bug!(), } -- 2.44.0