diff --git a/compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorder.kt b/compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorder.kt deleted file mode 100644 index b82f96d213d..00000000000 --- a/compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorder.kt +++ /dev/null @@ -1,12 +0,0 @@ -// IGNORE_BACKEND: JVM_IR -class A { - fun test(x: String?, a: String?, b: String?){} - - fun box(): String { - test(x = "x", b = "K", a = "O") - return "OK" - } -} -// Test argument reordering when call site argument order differs from declaration one -// 4 LOAD -// 2 STORE \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorderWithDefault.kt b/compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorderWithDefault.kt deleted file mode 100644 index c0129827c32..00000000000 --- a/compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorderWithDefault.kt +++ /dev/null @@ -1,15 +0,0 @@ -// IGNORE_BACKEND: JVM_IR -class A { - fun test(x: String? = "x", a: String?, b: String?, y: String? = "y") { - - } - - fun box(): String { - test(b = "K", a = "O") - return "OK" - } -} - -// Test argument reordering when call site argument order differs from declaration one -// 12 LOAD -// 5 STORE diff --git a/compiler/testData/codegen/bytecodeText/boxingOptimization/maxMinBy.kt b/compiler/testData/codegen/bytecodeText/boxingOptimization/maxMinBy.kt index 42f8dbe121a..4dd871eff9f 100644 --- a/compiler/testData/codegen/bytecodeText/boxingOptimization/maxMinBy.kt +++ b/compiler/testData/codegen/bytecodeText/boxingOptimization/maxMinBy.kt @@ -1,4 +1,5 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36645 Don't box primitive values in string template and string concatenation in JVM_IR // FILE: list.kt diff --git a/compiler/testData/codegen/bytecodeText/boxingOptimization/safeCallToPrimitiveEquality.kt b/compiler/testData/codegen/bytecodeText/boxingOptimization/safeCallToPrimitiveEquality.kt index ad2b01390a6..dbcc8173912 100644 --- a/compiler/testData/codegen/bytecodeText/boxingOptimization/safeCallToPrimitiveEquality.kt +++ b/compiler/testData/codegen/bytecodeText/boxingOptimization/safeCallToPrimitiveEquality.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36646 Don't box primitive values in equality comparison with nullable primitive values in JVM_IR + fun Long.id() = this fun String.drop2() = if (length >= 2) subSequence(2, length) else null diff --git a/compiler/testData/codegen/bytecodeText/boxingOptimization/safeCallWithElvis.kt b/compiler/testData/codegen/bytecodeText/boxingOptimization/safeCallWithElvis.kt index a2b30cdd46d..143c8abca6e 100644 --- a/compiler/testData/codegen/bytecodeText/boxingOptimization/safeCallWithElvis.kt +++ b/compiler/testData/codegen/bytecodeText/boxingOptimization/safeCallWithElvis.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36651 Avoid boxing in safe call / elvis chains in JVM_IR + class A(val x : Int, val y : A?) fun check(a : A?) : Int { diff --git a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedInChainOfInlineFuns.kt b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedInChainOfInlineFuns.kt index 97c22857577..b1ddc4e3cef 100644 --- a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedInChainOfInlineFuns.kt +++ b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedInChainOfInlineFuns.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36648 Captured variables not optimized in JVM_IR + fun test() { var x = 0 run { diff --git a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedInInlineOnly.kt b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedInInlineOnly.kt index 6ea1a3d11d3..07ac083dc2f 100644 --- a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedInInlineOnly.kt +++ b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedInInlineOnly.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36648 Captured variables not optimized in JVM_IR + fun test() { var x = 0 run { ++x } diff --git a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedValInLambdaInitializedInside.kt b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedValInLambdaInitializedInside.kt index b4c9207bfc6..0c2d846bae2 100644 --- a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedValInLambdaInitializedInside.kt +++ b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedValInLambdaInitializedInside.kt @@ -1,5 +1,6 @@ // WITH_RUNTIME // IGNORE_BACKEND: JVM_IR +// TODO KT-36648 Captured variables not optimized in JVM_IR // In JVM IR, SharedVariablesLowering transforms `x` into a shared variable to be able to update it from a lambda, // which is a separate function (...$lambda-0). diff --git a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedVarsOfSize2.kt b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedVarsOfSize2.kt index 6f01ad3ca0a..d043c6121b0 100644 --- a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedVarsOfSize2.kt +++ b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/capturedVarsOfSize2.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36648 Captured variables not optimized in JVM_IR + fun box(): String { var xl = 0L // Long, size 2 var xi = 0 // Int, size 1 diff --git a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/sharedSlotsWithCapturedVars.kt b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/sharedSlotsWithCapturedVars.kt index b0af2d2c7c8..d6de787dc32 100644 --- a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/sharedSlotsWithCapturedVars.kt +++ b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/sharedSlotsWithCapturedVars.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36648 Captured variables not optimized in JVM_IR + fun box(): String { run { run { diff --git a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/withStackNormalization.kt b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/withStackNormalization.kt index 6c228784924..79b12249537 100644 --- a/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/withStackNormalization.kt +++ b/compiler/testData/codegen/bytecodeText/capturedVarsOptimization/withStackNormalization.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36648 Captured variables not optimized in JVM_IR + fun add(x: Int, y: Int) = x + y fun test() { diff --git a/compiler/testData/codegen/bytecodeText/checkcast/kt15411.kt b/compiler/testData/codegen/bytecodeText/checkcast/kt15411.kt index 66f103e5381..8b947fcf2eb 100644 --- a/compiler/testData/codegen/bytecodeText/checkcast/kt15411.kt +++ b/compiler/testData/codegen/bytecodeText/checkcast/kt15411.kt @@ -1,4 +1,5 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36650 Don't generate CHECKCAST on null values in JVM_IR // KT-15411 Unnecessary CHECKCAST bytecode when dealing with null fun test1(): String? { diff --git a/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeCall.kt b/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeCall.kt index d284721906d..0baa78fd821 100644 --- a/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeCall.kt +++ b/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeCall.kt @@ -1,4 +1,5 @@ -// IGNORE_BACKEND: JVM_IR +// TODO KT-36654 Generate more compact bytecode for safe call in JVM_IR + interface A { fun foo() } @@ -7,5 +8,9 @@ fun test(x: A?) { x?.foo() } +// JVM_TEMPLATES // 1 POP // 0 ACONST_NULL + +// JVM_IR_TEMPLATES +// 0 ACONST_NULL diff --git a/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeCallWithReturnValue.kt b/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeCallWithReturnValue.kt index 601c252ede2..b59d8f9c251 100644 --- a/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeCallWithReturnValue.kt +++ b/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeCallWithReturnValue.kt @@ -1,4 +1,5 @@ -// IGNORE_BACKEND: JVM_IR +// TODO KT-36654 Generate more compact bytecode for safe call in JVM_IR + interface A { fun foo(): Any } @@ -7,5 +8,10 @@ fun test(x: A?) { x?.foo() } +// JVM_TEMPLATES // 2 POP +// 0 ACONST_NULL + +// JVM_IR_TEMPLATES +// 1 POP // 0 ACONST_NULL \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeLet.kt b/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeLet.kt index 44918f589f9..d9e127454b4 100644 --- a/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeLet.kt +++ b/compiler/testData/codegen/bytecodeText/coercionToUnitOptimization/safeLet.kt @@ -1,4 +1,6 @@ -// IGNORE_BACKEND: JVM_IR +// TODO KT-36650 Don't generate CHECKCAST on null values in JVM_IR +// TODO KT-36654 Generate more compact bytecode for safe call in JVM_IR + fun test(ss: List) { val shortStrings = hashSetOf() val longStrings = hashSetOf() @@ -14,7 +16,14 @@ fun test(ss: List) { } } +// JVM_TEMPLATES // 2 POP // 0 INVOKESTATIC java/lang/Boolean\.valueOf // 0 CHECKCAST java/lang/Boolean // 0 ACONST_NULL + +// JVM_IR_TEMPLATES +// 2 POP +// 0 INVOKESTATIC java/lang/Boolean\.valueOf +// 1 CHECKCAST java/lang/Boolean +// 1 ACONST_NULL diff --git a/compiler/testData/codegen/bytecodeText/constClosureOptimization.kt b/compiler/testData/codegen/bytecodeText/constClosureOptimization.kt index 2d0728aef7a..c9724cf4d42 100644 --- a/compiler/testData/codegen/bytecodeText/constClosureOptimization.kt +++ b/compiler/testData/codegen/bytecodeText/constClosureOptimization.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36637 Trivial closure optimizatin in JVM_IR + fun test() { fun local(){ diff --git a/compiler/testData/codegen/bytecodeText/intConstantNullableSafeCall.kt b/compiler/testData/codegen/bytecodeText/intConstantNullableSafeCall.kt index 652f34f981f..7a0b6219243 100644 --- a/compiler/testData/codegen/bytecodeText/intConstantNullableSafeCall.kt +++ b/compiler/testData/codegen/bytecodeText/intConstantNullableSafeCall.kt @@ -1,6 +1,9 @@ -// IGNORE_BACKEND: JVM_IR val a : Int? = 10 fun foo() = a?.toString() +// JVM_TEMPLATES // 1 IFNULL + +// JVM_IR_TEMPLATES +// 1 IFNONNULL diff --git a/compiler/testData/codegen/bytecodeText/kt10259.kt b/compiler/testData/codegen/bytecodeText/kt10259.kt index 21f7d258456..c41d14d6dde 100644 --- a/compiler/testData/codegen/bytecodeText/kt10259.kt +++ b/compiler/testData/codegen/bytecodeText/kt10259.kt @@ -1,7 +1,6 @@ -// IGNORE_BACKEND: JVM_IR fun box(): String { - var encl1 = "fail"; - var encl2 = "fail"; + var encl1 = "fail" + var encl2 = "fail" test { { encl1 = "OK" @@ -18,6 +17,18 @@ inline fun test(s: () -> Unit) { s() } +// JVM_TEMPLATES // 2 INNERCLASS Kt10259Kt\$box\$\$inlined\$test\$lambda\$1\s // 2 INNERCLASS Kt10259Kt\$box\$\$inlined\$test\$lambda\$1\$1 -// 4 INNERCLASS \ No newline at end of file +// 4 INNERCLASS + +// NB: JVM_IR generates 'INNERCLASS Kt10259Kt$box$1$1' in 'Kt10259Kt'. +// Although Oracle JVM doesn't check for consistency of InnerClasses attributes, +// this behavior is equivalent to javac and seems to be correct. + +// JVM_IR_TEMPLATES +// 3 INNERCLASS Kt10259Kt\$box\$1\$1\s +// 2 INNERCLASS Kt10259Kt\$box\$1\$1\$1 +// 5 INNERCLASS +// 1 class Kt10259Kt\$box\$1\$1\ extends +// 1 class Kt10259Kt\$box\$1\$1\$1 extends \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/kt10259_3.kt b/compiler/testData/codegen/bytecodeText/kt10259_3.kt index 8d3ca309bbc..5713f7ec4f0 100644 --- a/compiler/testData/codegen/bytecodeText/kt10259_3.kt +++ b/compiler/testData/codegen/bytecodeText/kt10259_3.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR fun box(): String { var encl1 = "fail"; test { @@ -20,6 +19,7 @@ inline fun test(crossinline s: () -> Unit) { }() } +// JVM_TEMPLATES // 3 INNERCLASS Kt10259_3Kt\$test\$1 null // 2 INNERCLASS Kt10259_3Kt\$test\$1\$1 // 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1\s @@ -27,4 +27,20 @@ inline fun test(crossinline s: () -> Unit) { // inlined: // 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1\$1\$lambda\$1\s // 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1\$1\$lambda\$1\$1\s -// 13 INNERCLASS \ No newline at end of file +// 13 INNERCLASS + +// NB JVM_IR generates +// final static INNERCLASS Kt10259_3Kt$box$1$1 null null +// public final static INNERCLASS Kt10259_3Kt$test$1 null null +// in Kt10259_3Kt. +// Although Oracle JVM doesn't check for consistency of InnerClasses attributes, +// this behavior is equivalent to javac and seems to be correct. + +// JVM_IR_TEMPLATES +// 3 INNERCLASS Kt10259_3Kt\$box\$1\$1\s +// 2 INNERCLASS Kt10259_3Kt\$box\$1\$1\$1\s +// 3 INNERCLASS Kt10259_3Kt\$test\$1\s +// 2 INNERCLASS Kt10259_3Kt\$test\$1\$1\s +// 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1\s +// 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1\$1\s +// 14 INNERCLASS \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/kt5016.kt b/compiler/testData/codegen/bytecodeText/kt5016.kt index 97109fb80db..740e27de06b 100644 --- a/compiler/testData/codegen/bytecodeText/kt5016.kt +++ b/compiler/testData/codegen/bytecodeText/kt5016.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36638 Use 'java/lang/StringBuilder.append (C)Ljava/lang/StringBuilder;' when appending single character in JVM_IR + // KT-5016 wrong StringBuilder append method invoked class kt5016 { fun f1(name : String) : String { diff --git a/compiler/testData/codegen/bytecodeText/kt5016int.kt b/compiler/testData/codegen/bytecodeText/kt5016int.kt index c4e7c8c558d..bab178f1dd6 100644 --- a/compiler/testData/codegen/bytecodeText/kt5016int.kt +++ b/compiler/testData/codegen/bytecodeText/kt5016int.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36638 Use 'java/lang/StringBuilder.append (C)Ljava/lang/StringBuilder;' when appending single character in JVM_IR + // KT-5016 wrong StringBuilder append method invoked class kt5016int { fun f1(num : Int) : String { diff --git a/compiler/testData/codegen/bytecodeText/kt5016intOrNull.kt b/compiler/testData/codegen/bytecodeText/kt5016intOrNull.kt index 17bc90dc336..978f087ca91 100644 --- a/compiler/testData/codegen/bytecodeText/kt5016intOrNull.kt +++ b/compiler/testData/codegen/bytecodeText/kt5016intOrNull.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// TODO KT-36638 Use 'java/lang/StringBuilder.append (C)Ljava/lang/StringBuilder;' when appending single character in JVM_IR + // KT-5016 wrong StringBuilder append method invoked class kt5016intOrNull { fun f1(num : Int?) : String { diff --git a/compiler/testData/codegen/bytecodeText/prefixIntVarIncrement.kt b/compiler/testData/codegen/bytecodeText/prefixIntVarIncrement.kt index 61413d755a3..eb1c0a903fa 100644 --- a/compiler/testData/codegen/bytecodeText/prefixIntVarIncrement.kt +++ b/compiler/testData/codegen/bytecodeText/prefixIntVarIncrement.kt @@ -1,4 +1,6 @@ // IGNORE_BACKEND: JVM_IR +// KT-36641 TODO Generate IINC instruction for prefix increment in JVM_IR + fun main(args: Array) { var i = 10 ++i diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index c17d56f4788..de44ec55983 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -391,16 +391,6 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeText/argumentOrder"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } - @TestMetadata("argumentReorder.kt") - public void testArgumentReorder() throws Exception { - runTest("compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorder.kt"); - } - - @TestMetadata("argumentReorderWithDefault.kt") - public void testArgumentReorderWithDefault() throws Exception { - runTest("compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorderWithDefault.kt"); - } - @TestMetadata("sameOrder.kt") public void testSameOrder() throws Exception { runTest("compiler/testData/codegen/bytecodeText/argumentOrder/sameOrder.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 3d8f81ddae8..cb4568ba59a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -6670,7 +6670,6 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/featureIntersection/inlineSuspendFinally.kt", "kotlin.coroutines"); } - @TestMetadata("interfaceMethodWithBody.kt") public void testInterfaceMethodWithBody() throws Exception { runTest("compiler/testData/codegen/box/coroutines/featureIntersection/interfaceMethodWithBody.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java index 1fefea29ab3..317e1f2a7e0 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java @@ -391,16 +391,6 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeText/argumentOrder"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } - @TestMetadata("argumentReorder.kt") - public void testArgumentReorder() throws Exception { - runTest("compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorder.kt"); - } - - @TestMetadata("argumentReorderWithDefault.kt") - public void testArgumentReorderWithDefault() throws Exception { - runTest("compiler/testData/codegen/bytecodeText/argumentOrder/argumentReorderWithDefault.kt"); - } - @TestMetadata("sameOrder.kt") public void testSameOrder() throws Exception { runTest("compiler/testData/codegen/bytecodeText/argumentOrder/sameOrder.kt");