diff --git a/src/mono/mono/mini/interp/transform.c b/src/mono/mono/mini/interp/transform.c index 994033b8613b1e..7572e2d3da2b45 100644 --- a/src/mono/mono/mini/interp/transform.c +++ b/src/mono/mono/mini/interp/transform.c @@ -9057,9 +9057,12 @@ interp_cprop (TransformData *td) if (num_dregs) { // Check if the previous definition of this var was used at all. // If it wasn't we can just clear the instruction + // + // MINT_MOV_DST_OFF doesn't fully write to the var, so we special case it here if (local_defs [dreg].ins != NULL && local_defs [dreg].ref_count == 0 && - !td->locals [dreg].indirects) { + !td->locals [dreg].indirects && + opcode != MINT_MOV_DST_OFF) { InterpInst *prev_def = local_defs [dreg].ins; if (MINT_NO_SIDE_EFFECTS (prev_def->opcode)) { for (int i = 0; i < mono_interp_op_sregs [prev_def->opcode]; i++)