[FIR2IR] Fix unwrapping of single-statement blocks

Unwrapping should be done with respect to `forceUnitType` parameter.

^KT-65019: Fixed
This commit is contained in:
vladislav.grechko
2024-01-16 14:16:46 +01:00
committed by Space Team
parent 5b7478c0a6
commit 8b1d87848d
22 changed files with 132 additions and 1 deletions
@@ -19726,6 +19726,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -19726,6 +19726,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -1146,7 +1146,7 @@ class Fir2IrVisitor(
} else {
val irStatements = mapToIrStatements()
val singleStatement = irStatements.singleOrNull()
if (origin?.isLoop != true && singleStatement is IrBlock &&
if (singleStatement is IrBlock && (!forceUnitType || singleStatement.type.isUnit()) &&
(singleStatement.origin == IrStatementOrigin.POSTFIX_INCR || singleStatement.origin == IrStatementOrigin.POSTFIX_DECR)
) {
singleStatement
@@ -19455,6 +19455,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -19455,6 +19455,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -19455,6 +19455,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -0,0 +1,12 @@
fun box(): String {
var variable = 0
try {
try {
null!!
} finally {
variable--
}
} catch (e: NullPointerException) {
return if (variable == -1) "OK" else "Fail"
}
}
@@ -19455,6 +19455,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -18609,6 +18609,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -19455,6 +19455,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -19455,6 +19455,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -16237,6 +16237,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/finallyAndFinally.kt");
@@ -14607,6 +14607,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -14607,6 +14607,12 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -14607,6 +14607,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -14607,6 +14607,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -16472,6 +16472,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -16858,6 +16858,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -16086,6 +16086,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -16473,6 +16473,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -14583,6 +14583,12 @@ public class FirWasmJsCodegenBoxTestGenerated extends AbstractFirWasmJsCodegenBo
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {
@@ -14583,6 +14583,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest
runTest("compiler/testData/codegen/box/finally/continueAndOuterFinally.kt");
}
@Test
@TestMetadata("decrementInFinally.kt")
public void testDecrementInFinally() throws Exception {
runTest("compiler/testData/codegen/box/finally/decrementInFinally.kt");
}
@Test
@TestMetadata("finallyAndFinally.kt")
public void testFinallyAndFinally() throws Exception {