diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt index 81dd8a751d4..fb3c72455ff 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt @@ -467,6 +467,10 @@ class IrBuiltInsOverFir( }.toMap() } + override val unsignedArraysElementTypes: Map by lazy { + unsignedTypesToUnsignedArrays.map { (k,v) -> v to referenceClassByClassId(k.classId)?.owner?.defaultType }.toMap() + } + override fun getKPropertyClass(mutable: Boolean, n: Int): IrClassSymbol = when (n) { 0 -> if (mutable) kMutableProperty0Class else kProperty0Class 1 -> if (mutable) kMutableProperty1Class else kProperty1Class diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt index d0f5e4df069..a1f55f7bb3c 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt @@ -398,6 +398,12 @@ class IrBuiltInsOverDescriptors( if (array == null) null else unsignedType to array }.toMap() + override val unsignedArraysElementTypes: Map by lazy { + unsignedTypesToUnsignedArrays.map { (k, v) -> + v to builtIns.builtInsModule.findClassAcrossModuleDependencies(k.classId)?.defaultType?.toIrType() + }.toMap() + } + override val lessFunByOperandType = primitiveIrTypesWithComparisons.defineComparisonOperatorForEachIrType(BuiltInOperatorNames.LESS) override val lessOrEqualFunByOperandType = primitiveIrTypesWithComparisons.defineComparisonOperatorForEachIrType(BuiltInOperatorNames.LESS_OR_EQUAL) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrBuiltIns.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrBuiltIns.kt index 6b779784b92..7a8186c445d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrBuiltIns.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrBuiltIns.kt @@ -115,6 +115,7 @@ abstract class IrBuiltIns { abstract val primitiveArrayForType: Map abstract val unsignedTypesToUnsignedArrays: Map + abstract val unsignedArraysElementTypes: Map abstract val lessFunByOperandType: Map abstract val lessOrEqualFunByOperandType: Map diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeUtils.kt index ac7211e4ae0..09b52d5a33d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeUtils.kt @@ -67,6 +67,7 @@ fun IrType.getArrayElementType(irBuiltIns: IrBuiltIns): IrType = } else { val classifier = this.classOrNull!! irBuiltIns.primitiveArrayElementTypes[classifier] + ?: irBuiltIns.unsignedArraysElementTypes[classifier] ?: throw AssertionError("Primitive array expected: $classifier") } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/annotationGetters.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/annotationGetters.kt index fdc5f701025..c7bbcf7dd6c 100644 --- a/compiler/testData/codegen/bytecodeListing/inlineClasses/annotationGetters.kt +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/annotationGetters.kt @@ -1,9 +1,6 @@ // !LANGUAGE: +InlineClasses // WITH_STDLIB -// IGNORE_BACKEND_K2: JVM_IR -// FIR status: KT-57211 K2: incorrect "error: an annotation argument must be a compile-time constant" on unsigned array in annotation argument - annotation class Ann( val u: UInt, val uba: UByteArray,