From b856f4800695a4430ba9ac1e0b86431eeb3f85df Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Fri, 21 Feb 2020 07:54:19 -0800 Subject: [PATCH] Added an 'unreachable' instruction for comprehensive switches --- IDEHelper/Compiler/BfStmtEvaluator.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/IDEHelper/Compiler/BfStmtEvaluator.cpp b/IDEHelper/Compiler/BfStmtEvaluator.cpp index 31402be4..da55872a 100644 --- a/IDEHelper/Compiler/BfStmtEvaluator.cpp +++ b/IDEHelper/Compiler/BfStmtEvaluator.cpp @@ -4039,14 +4039,12 @@ void BfModule::Visit(BfSwitchStatement* switchStmt) numExpressions += (int)switchCase->mCaseExpressions.size(); } + defaultBlock = mBfIRBuilder->CreateBlock("default"); if (switchStmt->mDefaultCase != NULL) - { - defaultBlock = mBfIRBuilder->CreateBlock("default"); + { blocks.push_back(defaultBlock); } - else - defaultBlock = endBlock; - + SizedArray deferredLocalAssignDataVec; deferredLocalAssignDataVec.resize(blocks.size()); @@ -4582,6 +4580,14 @@ void BfModule::Visit(BfSwitchStatement* switchStmt) allHadReturns = false; } } + else + { + mBfIRBuilder->AddBlock(defaultBlock); + mBfIRBuilder->SetInsertPoint(defaultBlock); + if (isComprehensive) + mBfIRBuilder->CreateUnreachable(); + mBfIRBuilder->CreateBr(endBlock); + } if (isComprehensive) {