diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt index a235f85cd6e..198b8267934 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt @@ -456,11 +456,11 @@ class IrDeclarationDeserializer( } - private fun IrField.withInitializerGuard(f: IrField.() -> Unit) { + private fun IrField.withInitializerGuard(isConst: Boolean, f: IrField.() -> Unit) { val oldBodiesPolicy = deserializeBodies try { - deserializeBodies = oldBodiesPolicy || type.checkObjectLeak() + deserializeBodies = isConst || oldBodiesPolicy || type.checkObjectLeak() f() } finally { deserializeBodies = oldBodiesPolicy @@ -611,7 +611,7 @@ class IrDeclarationDeserializer( } - private fun deserializeIrField(proto: ProtoField): IrField = + private fun deserializeIrField(proto: ProtoField, isConst: Boolean): IrField = withDeserializedIrDeclarationBase(proto.base) { symbol, uniqId, startOffset, endOffset, origin, fcode -> checkSymbolType(symbol) val nameType = BinaryNameAndType.decode(proto.nameType) @@ -633,7 +633,7 @@ class IrDeclarationDeserializer( field.usingParent { if (proto.hasInitializer()) { - withInitializerGuard { + withInitializerGuard(isConst) { initializer = deserializeExpressionBody(proto.initializer) } } @@ -699,7 +699,7 @@ class IrDeclarationDeserializer( } } if (proto.hasBackingField()) { - backingField = deserializeIrField(proto.backingField).also { + backingField = deserializeIrField(proto.backingField, prop.isConst).also { it.correspondingPropertySymbol = symbol } } @@ -722,7 +722,7 @@ class IrDeclarationDeserializer( val declaration: IrDeclaration = when (proto.declaratorCase!!) { IR_ANONYMOUS_INIT -> deserializeIrAnonymousInit(proto.irAnonymousInit) IR_CONSTRUCTOR -> deserializeIrConstructor(proto.irConstructor) - IR_FIELD -> deserializeIrField(proto.irField) + IR_FIELD -> deserializeIrField(proto.irField, isConst = false) IR_CLASS -> deserializeIrClass(proto.irClass) IR_FUNCTION -> deserializeIrFunction(proto.irFunction) IR_PROPERTY -> deserializeIrProperty(proto.irProperty) diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/BoxJsTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/BoxJsTestGenerated.java index c00990342b9..f972544fcc4 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/BoxJsTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/BoxJsTestGenerated.java @@ -4150,6 +4150,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { runTest("js/js.translator/testData/box/incremental/classReferencingClass.kt"); } + @Test + @TestMetadata("constValInInlineFun.kt") + public void testConstValInInlineFun() throws Exception { + runTest("js/js.translator/testData/box/incremental/constValInInlineFun.kt"); + } + @Test @TestMetadata("coroutines.kt") public void testCoroutines() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsTestGenerated.java index f8f5a66326f..4c689bbfc4c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrBoxJsTestGenerated.java @@ -4522,6 +4522,12 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest { runTest("js/js.translator/testData/box/incremental/classReferencingClass.kt"); } + @Test + @TestMetadata("constValInInlineFun.kt") + public void testConstValInInlineFun() throws Exception { + runTest("js/js.translator/testData/box/incremental/constValInInlineFun.kt"); + } + @Test @TestMetadata("coroutines.kt") public void testCoroutines() throws Exception { diff --git a/js/js.translator/testData/box/incremental/constValInInlineFun.kt b/js/js.translator/testData/box/incremental/constValInInlineFun.kt new file mode 100644 index 00000000000..7da4aa541ac --- /dev/null +++ b/js/js.translator/testData/box/incremental/constValInInlineFun.kt @@ -0,0 +1,18 @@ +// NO_COMMON_FILES +// MODULE: lib +// FILE: lib.kt + +const val FOO: String = "OK" + +class B { + inline fun bar(): String { + return FOO // Constant property has to have a backing field with initializer + } +} + +// MODULE: main(lib) +// FILE: main.kt +// RECOMPILE +fun box(): String { + return B().bar() +} \ No newline at end of file