[box-tests] Tests on field init optimization
Added tests on all primitive types and a test when the field's type is an inline class
This commit is contained in:
Generated
+5
@@ -28815,6 +28815,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("fieldInitializerOptimization_inlineClass.kt")
|
||||||
|
public void testFieldInitializerOptimization_inlineClass() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization_inlineClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("generics.kt")
|
@TestMetadata("generics.kt")
|
||||||
public void testGenerics() throws Exception {
|
public void testGenerics() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
||||||
|
|||||||
+35
-4
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: NATIVE
|
|
||||||
// IGNORE_BACKEND: JS
|
// IGNORE_BACKEND: JS
|
||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS_IR
|
||||||
// IGNORE_BACKEND: JS_IR_ES6
|
// IGNORE_BACKEND: JS_IR_ES6
|
||||||
@@ -8,15 +7,47 @@ open class Base {
|
|||||||
init { setup() }
|
init { setup() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val placeHolder = Any()
|
||||||
|
|
||||||
class Derived : Base {
|
class Derived : Base {
|
||||||
constructor() : super()
|
constructor() : super()
|
||||||
override fun setup() { x = 1 }
|
override fun setup() {
|
||||||
|
xBool = true
|
||||||
|
xByte = 1.toByte()
|
||||||
|
xChar = 2.toChar()
|
||||||
|
xShort = 3.toShort()
|
||||||
|
xInt = 4
|
||||||
|
xLong = 5L
|
||||||
|
xFloat = 6.0f
|
||||||
|
xDouble = 7.0
|
||||||
|
xRef = placeHolder
|
||||||
|
}
|
||||||
|
|
||||||
// Technically, this field initializer comes after the superclass
|
// Technically, this field initializer comes after the superclass
|
||||||
// constructor is called. However, we optimize away field initializers
|
// constructor is called. However, we optimize away field initializers
|
||||||
// which set fields to their default value, which is why x ends up with
|
// which set fields to their default value, which is why x ends up with
|
||||||
// value 1 after the constructor call.
|
// value 1 after the constructor call.
|
||||||
var x = 0
|
var xBool = false
|
||||||
|
var xByte = 0.toByte()
|
||||||
|
var xChar = 0.toChar()
|
||||||
|
var xShort = 0.toShort()
|
||||||
|
var xInt = 0
|
||||||
|
var xLong = 0L
|
||||||
|
var xFloat = 0.0f
|
||||||
|
var xDouble = 0.0
|
||||||
|
var xRef: Any? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun box(): String = if (Derived().x == 1) "OK" else "Fail"
|
fun box(): String {
|
||||||
|
val d = Derived()
|
||||||
|
if (d.xBool != true) return "fail Bool"
|
||||||
|
if (d.xByte != 1.toByte()) return "fail Byte"
|
||||||
|
if (d.xChar != 2.toChar()) return "fail Char"
|
||||||
|
if (d.xShort != 3.toShort()) return "fail Short"
|
||||||
|
if (d.xInt != 4) return "fail Int"
|
||||||
|
if (d.xLong != 5L) return "fail Long"
|
||||||
|
if (d.xFloat != 6.0f) return "fail Float"
|
||||||
|
if (d.xDouble != 7.0) return "fail Double"
|
||||||
|
if (d.xRef != placeHolder) return "fail Ref"
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
|
|||||||
Vendored
+32
@@ -0,0 +1,32 @@
|
|||||||
|
// IGNORE_BACKEND: JS
|
||||||
|
// IGNORE_BACKEND: JS_IR
|
||||||
|
// IGNORE_BACKEND: JS_IR_ES6
|
||||||
|
// IGNORE_BACKEND: JVM
|
||||||
|
// IGNORE_BACKEND: JVM_IR
|
||||||
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
|
|
||||||
|
open class Base {
|
||||||
|
open fun setup() {}
|
||||||
|
init { setup() }
|
||||||
|
}
|
||||||
|
|
||||||
|
inline class Z(val y: Int)
|
||||||
|
|
||||||
|
class Derived : Base {
|
||||||
|
constructor() : super()
|
||||||
|
override fun setup() {
|
||||||
|
x = Z(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Technically, this field initializer comes after the superclass
|
||||||
|
// constructor is called. However, we optimize away field initializers
|
||||||
|
// which set fields to their default value, which is why x ends up with
|
||||||
|
// value 1 after the constructor call.
|
||||||
|
var x = Z(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val d = Derived()
|
||||||
|
if (d.x.y != 1) return "fail"
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
+5
@@ -30411,6 +30411,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("fieldInitializerOptimization_inlineClass.kt")
|
||||||
|
public void testFieldInitializerOptimization_inlineClass() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization_inlineClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("generics.kt")
|
@TestMetadata("generics.kt")
|
||||||
public void testGenerics() throws Exception {
|
public void testGenerics() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
||||||
|
|||||||
+5
@@ -27947,6 +27947,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
public static class SecondaryConstructors extends AbstractLightAnalysisModeTest {
|
public static class SecondaryConstructors extends AbstractLightAnalysisModeTest {
|
||||||
|
@TestMetadata("fieldInitializerOptimization_inlineClass.kt")
|
||||||
|
public void ignoreFieldInitializerOptimization_inlineClass() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization_inlineClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
private void runTest(String testDataFilePath) throws Exception {
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -28815,6 +28815,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("fieldInitializerOptimization_inlineClass.kt")
|
||||||
|
public void testFieldInitializerOptimization_inlineClass() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization_inlineClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("generics.kt")
|
@TestMetadata("generics.kt")
|
||||||
public void testGenerics() throws Exception {
|
public void testGenerics() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
||||||
|
|||||||
Generated
+5
@@ -23411,6 +23411,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
|
|||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("fieldInitializerOptimization_inlineClass.kt")
|
||||||
|
public void testFieldInitializerOptimization_inlineClass() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization_inlineClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("generics.kt")
|
@TestMetadata("generics.kt")
|
||||||
public void testGenerics() throws Exception {
|
public void testGenerics() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
||||||
|
|||||||
Generated
+5
@@ -23411,6 +23411,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("fieldInitializerOptimization_inlineClass.kt")
|
||||||
|
public void testFieldInitializerOptimization_inlineClass() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization_inlineClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("generics.kt")
|
@TestMetadata("generics.kt")
|
||||||
public void testGenerics() throws Exception {
|
public void testGenerics() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
||||||
|
|||||||
+5
@@ -23426,6 +23426,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("fieldInitializerOptimization_inlineClass.kt")
|
||||||
|
public void testFieldInitializerOptimization_inlineClass() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/secondaryConstructors/fieldInitializerOptimization_inlineClass.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("generics.kt")
|
@TestMetadata("generics.kt")
|
||||||
public void testGenerics() throws Exception {
|
public void testGenerics() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
runTest("compiler/testData/codegen/box/secondaryConstructors/generics.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user