From ac8d5cf0145f28cff11e4a41337240860f2e6e69 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 30 Aug 2021 09:37:19 -0700 Subject: [PATCH] Fix for early unconditional return in dtor --- IDEHelper/Compiler/BfModule.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index bce956a6..e55c7d8d 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -15049,13 +15049,9 @@ void BfModule::EmitReturn(const BfTypedValue& val) else { EmitDeferredScopeCalls(false, NULL); - if (val) { - if (mCurMethodInstance->mReturnType->IsValuelessType()) - mBfIRBuilder->CreateRetVoid(); - else - mBfIRBuilder->CreateRet(val.mValue); + BF_ASSERT(mBfIRBuilder->mIgnoreWrites); } } @@ -15803,6 +15799,10 @@ void BfModule::EmitDtorBody() if (auto bodyBlock = BfNodeDynCast(methodDef->mBody)) { VisitEmbeddedStatement(bodyBlock); + + // We don't have an exit block and no return was actually emitted, so we set this to false to ensure a proper ret emission later + mCurMethodState->mHadReturn = false; + if (bodyBlock->mCloseBrace != NULL) { UpdateSrcPos(bodyBlock->mCloseBrace);