diff --git a/oscar64/GlobalOptimizer.cpp b/oscar64/GlobalOptimizer.cpp index c420b1f..6490e09 100644 --- a/oscar64/GlobalOptimizer.cpp +++ b/oscar64/GlobalOptimizer.cpp @@ -160,6 +160,7 @@ bool GlobalOptimizer::CheckConstReturns(Expression*& exp) lexp->mRight->mToken = TK_MUL; lexp->mRight->mLeft = pex; lexp->mRight->mDecType = pcall->mBase->mBase; + lexp->mDecType = lexp->mRight->mDecType; exp->mDecType = TheVoidTypeDeclaration; exp = lexp; return true; diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index 9f64312..47fbfd1 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -13579,6 +13579,13 @@ bool InterCodeBasicBlock::RecheckOuterFrame(void) if (ins->mSrc[1].mMemory == IM_FRAME) return true; } + else if (ins->mCode == IC_COPY) + { + if (ins->mSrc[0].mMemory == IM_FRAME) + return true; + if (ins->mSrc[1].mMemory == IM_FRAME) + return true; + } else if (ins->mCode == IC_CONSTANT) { if (ins->mConst.mType == IT_POINTER && ins->mConst.mMemory == IM_FRAME) @@ -22067,7 +22074,7 @@ void InterCodeProcedure::Close(void) { GrowingTypeArray tstack(IT_NONE); - CheckFunc = !strcmp(mIdent->mString, "f"); + CheckFunc = !strcmp(mIdent->mString, "bar2"); CheckCase = false; mEntryBlock = mBlocks[0];