@@ -1942,7 +1942,7 @@ void BfModule::NewScopeState(bool createLexicalBlock, bool flushValueScope)
{
if (checkScope->mLabel == mCurMethodState->mCurScope->mLabel)
- auto errorNode = Fail("Duplicate scope label", curScope->mLabelNode);
+ auto errorNode = Warn(0, StrFormat("Duplicate scope label '%s'", checkScope->mLabel.c_str()), curScope->mLabelNode);
if (errorNode != NULL)
mCompiler->mPassInstance->MoreInfo("See previous scope label", checkScope->mLabelNode);
break;
@@ -5171,6 +5171,7 @@ void BfModule::Visit(BfSwitchStatement* switchStmt)
caseScopeData.mIsSharedTempBlock = true;
mCurMethodState->AddScope(&caseScopeData);
NewScopeState();
+ caseScopeData.mLabel = newScope.mLabel;
bool hadReturn = false;
VisitCodeBlock(switchCase->mCodeBlock, BfIRBlock(), endBlock, BfIRBlock(), true, &hadReturn, switchStmt->mLabelNode);
@@ -1,3 +1,5 @@
+#pragma warning disable 168
+
using System;
namespace Tests
@@ -42,6 +44,27 @@ namespace Tests
Shape shape = .Circle(10, 20, 30);
Test.Assert(Switch1(shape) == 12);
+ int val = 123;
+ int result = 0;
+ switch (val)
+ {
+ case 0:
+ result = 1;
+ default:
+ SWITCH2:
+ case 2:
+ result = 2;
+ result = 3;
+ break SWITCH2;
+ }
+ result = 4;
+ Test.Assert(result == 4);
}