From 0080a85345666b8c91afaa37ad94567f45eb6059 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Thu, 26 Oct 2023 07:54:03 +0200 Subject: [PATCH] Fix deadlock on empty switch statement --- oscar64/InterCode.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index 822f932..77f3d17 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -4990,6 +4990,14 @@ void InterCodeBasicBlock::GenerateTraces(bool expand, bool compact) mFalseJump = nullptr; } + if (mFalseJump && sz > 0 && mInstructions[sz - 1]->mCode == IC_BRANCH && mTrueJump && mTrueJump == mFalseJump) + { + mInstructions[sz - 1]->mCode = IC_JUMP; + mInstructions[sz - 1]->mNumOperands = 0; + mFalseJump->mNumEntries--; + mFalseJump = nullptr; + } + if (mTrueJump && mTrueJump->mInstructions.Size() == 1 && mTrueJump->mInstructions[0]->mCode == IC_JUMP && !mTrueJump->mLoopHead && mTrueJump->mTraceIndex != mIndex) { mTrueJump->mTraceIndex = mIndex; @@ -18249,7 +18257,7 @@ void InterCodeProcedure::Close(void) { GrowingTypeArray tstack(IT_NONE); - CheckFunc = !strcmp(mIdent->mString, "Camera::GetTileAtPixelPos"); + CheckFunc = !strcmp(mIdent->mString, "main"); CheckCase = false; mEntryBlock = mBlocks[0];