From: Santiago Pastorino Date: Tue, 10 Dec 2019 23:40:29 +0000 (-0300) Subject: Promote `Repeat`s to constants instead of statics X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=2508f17ac2d8c645ab8127cea87c8e3e77d1053a;p=rust.git Promote `Repeat`s to constants instead of statics --- 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!(), }