diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/WhileConditionFolding.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/WhileConditionFolding.kt index 5a90ada6a93..c5b863b3006 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/WhileConditionFolding.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/clean/WhileConditionFolding.kt @@ -105,7 +105,7 @@ class WhileConditionFolding(val body: JsBlock) { // therefore for single `break` we should return `false`. is JsBreak -> { val target = statement.label?.name - if (label == null || label == target) JsLiteral.FALSE else null + if (label == target) JsLiteral.FALSE else null } // Code like this diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/WhileConditionFoldingTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/WhileConditionFoldingTest.kt index c3f7fddd79e..86e5e6fa4b8 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/WhileConditionFoldingTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/optimizer/WhileConditionFoldingTest.kt @@ -40,4 +40,6 @@ class WhileConditionFoldingTest : BasicOptimizerTest("while-condition-folding") @Test fun doWhileWithNestedContinue() = box() @Test fun labeledContinueInNestedLoop() = box() + + @Test fun labeledBreak() = box() } \ No newline at end of file diff --git a/js/js.translator/testData/js-optimizer/while-condition-folding/labeledBreak.optimized.js b/js/js.translator/testData/js-optimizer/while-condition-folding/labeledBreak.optimized.js new file mode 100644 index 00000000000..b7c64c8cb39 --- /dev/null +++ b/js/js.translator/testData/js-optimizer/while-condition-folding/labeledBreak.optimized.js @@ -0,0 +1,19 @@ +function box() { + var i = 0; + var j = 0; + var log = ""; + outer: while (i < 10) { + while (j < 10) { + if (i + j >= 3) { + break outer; + } + log += i + "," + j + ";"; + j++; + } + i++; + } + + if (log != "0,0;0,1;0,2;") return "fail: " + log; + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/js-optimizer/while-condition-folding/labeledBreak.original.js b/js/js.translator/testData/js-optimizer/while-condition-folding/labeledBreak.original.js new file mode 100644 index 00000000000..b7c64c8cb39 --- /dev/null +++ b/js/js.translator/testData/js-optimizer/while-condition-folding/labeledBreak.original.js @@ -0,0 +1,19 @@ +function box() { + var i = 0; + var j = 0; + var log = ""; + outer: while (i < 10) { + while (j < 10) { + if (i + j >= 3) { + break outer; + } + log += i + "," + j + ";"; + j++; + } + i++; + } + + if (log != "0,0;0,1;0,2;") return "fail: " + log; + + return "OK" +} \ No newline at end of file