diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt index 0bf3c58c0b9..5e755317beb 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt @@ -81,12 +81,19 @@ enum class EvaluationMode { override fun canEvaluateExpression(expression: IrExpression): Boolean { if (expression !is IrCall) return false - if (expression.getAllArgumentsWithIr().any { it.second?.type?.isUnsigned() == true }) { + if (expression.hasUnsignedArgs()) { return expression.symbol.owner.fqNameWhenAvailable?.asString() == "kotlin.String.plus" } return true } + + private fun IrCall.hasUnsignedArgs(): Boolean { + fun IrExpression?.hasUnsignedType() = this != null && type.isUnsigned() + if (dispatchReceiver.hasUnsignedType() || extensionReceiver.hasUnsignedType()) return true + if ((0 until this.valueArgumentsCount).any { getValueArgument(it)?.type?.isUnsigned() == true }) return true + return false + } }, ONLY_INTRINSIC_CONST {