[FIR2IR] KT-57211: Support unsigned arrayOf-s in fir2ir
^KT-57211 Fixed
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 81dd8a7..fb3c724 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 @@
}.toMap()
}
+ override val unsignedArraysElementTypes: Map<IrClassSymbol, IrType?> 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 d0f5e4d..a1f55f7 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 @@
if (array == null) null else unsignedType to array
}.toMap()
+ override val unsignedArraysElementTypes: Map<IrClassSymbol, IrType?> 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 6b77978..7a8186c 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 val primitiveArrayForType: Map<IrType?, IrClassSymbol>
abstract val unsignedTypesToUnsignedArrays: Map<UnsignedType, IrClassSymbol>
+ abstract val unsignedArraysElementTypes: Map<IrClassSymbol, IrType?>
abstract val lessFunByOperandType: Map<IrClassifierSymbol, IrSimpleFunctionSymbol>
abstract val lessOrEqualFunByOperandType: Map<IrClassifierSymbol, IrSimpleFunctionSymbol>
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 ac7211e..09b52d5 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 @@
} 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 fdc5f70..c7bbcf7 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,