Skip to content

Commit eae953b

Browse files
authored
[llvm] Fix spilling of valuetypes to the stack if they are passed by addr. (#92658)
The previous code would spill the valuetype when it was passed by addr, and another bblock could try to read from the unitialized stack location.
1 parent 215145e commit eae953b

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/mono/mono/mini/mini-llvm.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7812,10 +7812,10 @@ MONO_RESTORE_WARNING
78127812
LLVMTypeRef etype = type_to_llvm_type (ctx, t);
78137813

78147814
if (!addresses [ins->sreg1]) {
7815-
addresses [ins->sreg1] = create_address (ctx->module, build_named_alloca (ctx, t, "llvm_outarg_vt"), etype);
7815+
g_assert (!addresses [ins->dreg]);
7816+
addresses [ins->dreg] = create_address (ctx->module, build_named_alloca (ctx, t, "llvm_outarg_vt"), etype);
78167817
g_assert (values [ins->sreg1]);
7817-
LLVMBuildStore (builder, convert (ctx, values [ins->sreg1], etype), addresses [ins->sreg1]->value);
7818-
addresses [ins->dreg] = addresses [ins->sreg1];
7818+
LLVMBuildStore (builder, convert (ctx, values [ins->sreg1], etype), addresses [ins->dreg]->value);
78197819
} else if (ainfo->storage == LLVMArgVtypeAddr || values [ins->sreg1] == addresses [ins->sreg1]->value) {
78207820
/* LLVMArgVtypeByRef/LLVMArgVtypeAddr, have to make a copy */
78217821
addresses [ins->dreg] = build_alloca_address (ctx, t);

0 commit comments

Comments
 (0)