[K/Wasm] Fix object optimization false trigger on non-pure objects ^KT-66471 Fixed

This commit is contained in:
Artem Kobzar
2024-03-14 17:12:45 +00:00
committed by Space Team
parent a2a0e8cb38
commit eb8054ac1e
23 changed files with 147 additions and 1 deletions
@@ -4882,6 +4882,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -4882,6 +4882,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -4865,6 +4865,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -4865,6 +4865,12 @@ public class FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGener
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -4865,6 +4865,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -87,7 +87,7 @@ class PurifyObjectInstanceGettersLowering(val context: JsCommonBackendContext) :
private fun IrStatement.isPureStatementForObjectInitialization(owner: IrClass): Boolean {
return (
this is IrReturn ||
(this is IrReturn && value.isPureStatementForObjectInitialization(owner)) ||
// Only objects which don't have a class parent
(this is IrDelegatingConstructorCall && symbol.owner.parent == context.irBuiltIns.anyClass.owner) ||
(this is IrExpression && isPure(anyVariable = true, checkFields = false, context = context)) ||
@@ -0,0 +1,21 @@
// KT-66471
interface TestInterface {
fun foo()
}
var result: Any? = "Fail: not initialized"
object TestObject {
private val test = run {
result = TestInterface::foo
"OK"
}
fun bar() {}
}
fun box(): String {
TestObject.bar()
return if (result is Function<*>) "OK" else result.toString()
}
@@ -4865,6 +4865,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -4667,6 +4667,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -4865,6 +4865,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -4865,6 +4865,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -4865,6 +4865,12 @@ public class FirBlackBoxCodegenTestWithInlineScopesGenerated extends AbstractFir
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() {
@@ -4255,6 +4255,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@TestMetadata("javaField.kt")
public void testJavaField() {
runTest("compiler/testData/codegen/box/callableReference/javaField.kt");
@@ -3611,6 +3611,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {
@@ -3611,6 +3611,12 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {
@@ -3611,6 +3611,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {
@@ -3611,6 +3611,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {
@@ -3697,6 +3697,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {
@@ -3781,6 +3781,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {
@@ -3613,6 +3613,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {
@@ -3698,6 +3698,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {
@@ -3599,6 +3599,12 @@ public class FirWasmJsCodegenBoxTestGenerated extends AbstractFirWasmJsCodegenBo
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {
@@ -3599,6 +3599,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest
runTest("compiler/testData/codegen/box/callableReference/inlineArrayConstructors.kt");
}
@Test
@TestMetadata("interfaceMethodReference.kt")
public void testInterfaceMethodReference() {
runTest("compiler/testData/codegen/box/callableReference/interfaceMethodReference.kt");
}
@Test
@TestMetadata("kt21014.kt")
public void testKt21014() {