[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
@@ -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");