Fix short param forwarding of struct elements

This commit is contained in:
drmortalwombat 2024-09-16 17:45:32 +02:00
parent 5aeec2fad4
commit 68b57bb9a8

View File

@ -7732,7 +7732,7 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSetsForward(const GrowingVariab
vr = ins->mDst.mRange; vr = ins->mDst.mRange;
if (ins->mSrc[0].mTemp < 0 && ins->mSrc[0].mMemory == IM_FPARAM) if (ins->mSrc[0].mTemp < 0 && ins->mSrc[0].mMemory == IM_FPARAM)
vr.Limit(mLocalParamValueRange[ins->mSrc[0].mVarIndex]); vr.Limit(mLocalParamValueRange[ins->mSrc[0].mVarIndex + ins->mSrc[0].mIntConst]);
#if 1 #if 1
if (ins->mDst.mType == IT_INT8) if (ins->mDst.mType == IT_INT8)
{ {
@ -8409,7 +8409,7 @@ void InterCodeBasicBlock::UpdateLocalIntegerRangeSetsForward(const GrowingVariab
else if (ins->mCode == IC_STORE) else if (ins->mCode == IC_STORE)
{ {
if (ins->mSrc[1].mTemp < 0 && ins->mSrc[1].mMemory == IM_FPARAM) if (ins->mSrc[1].mTemp < 0 && ins->mSrc[1].mMemory == IM_FPARAM)
mLocalParamValueRange[ins->mSrc[1].mVarIndex] = ins->mSrc[0].mRange; mLocalParamValueRange[ins->mSrc[1].mVarIndex + ins->mSrc[0].mIntConst] = ins->mSrc[0].mRange;
} }
assert(mProc->mLocalValueRange.Size() == mExitRequiredTemps.Size()); assert(mProc->mLocalValueRange.Size() == mExitRequiredTemps.Size());
@ -21992,7 +21992,7 @@ void InterCodeProcedure::Close(void)
{ {
GrowingTypeArray tstack(IT_NONE); GrowingTypeArray tstack(IT_NONE);
CheckFunc = !strcmp(mIdent->mString, "main"); CheckFunc = !strcmp(mIdent->mString, "f");
CheckCase = false; CheckCase = false;
mEntryBlock = mBlocks[0]; mEntryBlock = mBlocks[0];