From bdbf8d798029a08fa5df8de6a5a108c307a431f0 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Fri, 25 Sep 2020 19:00:10 +0300 Subject: [PATCH] Use correct class type when creating class references (for e.g. PolymorphicSerializer) Former class reference may had type arguments in it, which lead to bugs in JS IR. Fixes https://github.com/Kotlin/kotlinx.serialization/issues/1072 --- .../compiler/backend/ir/GeneratorHelpers.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt index b11fd6ae8ff..c0b3a73fc25 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt @@ -429,14 +429,13 @@ interface IrBuilderExtension { fun createClassReference(classType: KotlinType, startOffset: Int, endOffset: Int): IrClassReference { val clazz = classType.toClassDescriptor!! - val returnType = - kClassTypeFor(TypeProjectionImpl(Variance.INVARIANT, classType)) + val classSymbol = compilerContext.referenceClass(clazz.fqNameSafe) ?: error("Couldn't load class $clazz") return IrClassReferenceImpl( startOffset, endOffset, - returnType.toIrType(), - compilerContext.referenceClass(clazz.fqNameSafe) ?: error("Couldn't load class $clazz"), - classType.toIrType() + compilerContext.irBuiltIns.kClassClass.starProjectedType, + classSymbol, + classSymbol.starProjectedType ) }