Skip to content

Commit dc57db2

Browse files
committed
PrepareFunction fix during reentry (error condition)
1 parent 238def6 commit dc57db2

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

IDEHelper/Compiler/CeMachine.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5466,6 +5466,7 @@ bool CeContext::Execute(CeFunction* startFunction, uint8* startStackPtr, uint8*
54665466
{
54675467
auto curFrame = _GetCurFrame();
54685468
SetAndRestoreValue<CeFrame*> prevFrame(mCurFrame, &curFrame);
5469+
BF_ASSERT(!callEntry.mFunction->mInitialized);
54695470
mCeMachine->PrepareFunction(callEntry.mFunction, NULL);
54705471
}
54715472

@@ -6915,8 +6916,14 @@ void CeMachine::PrepareFunction(CeFunction* ceFunction, CeBuilder* parentBuilder
69156916
AutoTimer autoTimer(mRevisionExecuteTime);
69166917
SetAndRestoreValue<CeFunction*> prevCEFunction(mPreparingFunction, ceFunction);
69176918

6919+
BF_ASSERT(!ceFunction->mInitialized);
6920+
69186921
if (ceFunction->mFunctionKind == CeFunctionKind_NotSet)
6919-
CheckFunctionKind(ceFunction);
6922+
{
6923+
CheckFunctionKind(ceFunction);
6924+
if (ceFunction->mInitialized)
6925+
return;
6926+
}
69206927

69216928
BF_ASSERT(!ceFunction->mInitialized);
69226929
ceFunction->mInitialized = true;

0 commit comments

Comments
 (0)