From 07e47140a609e9ff1785bece81effcf9504b9f09 Mon Sep 17 00:00:00 2001 From: Andrey Zinovyev Date: Tue, 11 May 2021 17:53:53 +0300 Subject: [PATCH] [FIR] Treat unsigned numbers as primitives in constant checker --- .../jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt | 2 +- .../codegen/box/constants/foldingBinaryOpsUnsignedConst.kt | 1 - .../src/org/jetbrains/kotlin/name/StandardClassIds.kt | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt index b5c49d0b40d..a760d6e7d8a 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt @@ -134,7 +134,7 @@ internal fun checkConstantArguments( if (calleeReference.name == OperatorNameConventions.PLUS && expClassId != receiverClassId - && (expClassId !in StandardClassIds.primitiveTypesAndString || receiverClassId !in StandardClassIds.primitiveTypesAndString) + && (expClassId !in StandardClassIds.constantAllowedTypes || receiverClassId !in StandardClassIds.constantAllowedTypes) ) { return ConstantArgumentKind.NOT_CONST } diff --git a/compiler/testData/codegen/box/constants/foldingBinaryOpsUnsignedConst.kt b/compiler/testData/codegen/box/constants/foldingBinaryOpsUnsignedConst.kt index 8d44e0b64af..f0d27e0b0b7 100644 --- a/compiler/testData/codegen/box/constants/foldingBinaryOpsUnsignedConst.kt +++ b/compiler/testData/codegen/box/constants/foldingBinaryOpsUnsignedConst.kt @@ -1,5 +1,4 @@ // WITH_RUNTIME -// IGNORE_BACKEND_FIR: JVM_IR const val a = "INT " + 0x8fffffffU const val b = "BYTE " + 0x8ffU diff --git a/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt b/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt index 7d361c39708..fe5859e1c70 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/name/StandardClassIds.kt @@ -68,7 +68,6 @@ object StandardClassIds { Byte, Short, Int, Long, Float, Double ) - val primitiveTypesAndString = primitiveTypes + String val primitiveArrayTypeByElementType = primitiveTypes.associate { id -> id to id.shortClassName.primitiveArrayId() } val elementTypeByPrimitiveArrayType = primitiveArrayTypeByElementType.inverseMap() @@ -77,6 +76,8 @@ object StandardClassIds { val unsignedArrayTypeByElementType = unsignedTypes.associate { id -> id to id.shortClassName.primitiveArrayId() } val elementTypeByUnsignedArrayType = unsignedArrayTypeByElementType.inverseMap() + val constantAllowedTypes = primitiveTypes + unsignedTypes + String + val Continuation = ClassId(StandardNames.COROUTINES_PACKAGE_FQ_NAME_RELEASE, StandardNames.CONTINUATION_INTERFACE_FQ_NAME_RELEASE.shortName())