diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index e2c671d6166..364d1f4976f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -38,6 +38,7 @@ import org.jetbrains.kotlin.codegen.binding.CodegenBinding; import org.jetbrains.kotlin.codegen.context.*; import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension; import org.jetbrains.kotlin.codegen.inline.*; +import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicCallable; import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethod; import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods; import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicPropertyGetter; @@ -3131,7 +3132,8 @@ public class ExpressionCodegen extends KtVisitor impleme StackValue rightValue; Type leftType = expressionType(left); Type rightType = expressionType(right); - if (isPrimitive(leftType) && isPrimitive(rightType)) { + Callable callable = resolveToCallable((FunctionDescriptor) resolvedCall.getResultingDescriptor(), false, resolvedCall); + if (callable instanceof IntrinsicCallable) { type = comparisonOperandType(leftType, rightType); leftValue = gen(left); rightValue = gen(right); diff --git a/compiler/testData/codegen/box/binaryOp/kt11163.kt b/compiler/testData/codegen/box/binaryOp/kt11163.kt new file mode 100644 index 00000000000..6a20534e140 --- /dev/null +++ b/compiler/testData/codegen/box/binaryOp/kt11163.kt @@ -0,0 +1,12 @@ +operator fun Int.compareTo(c: Char) = 0 + +fun foo(x: Int, y: Char): String { + if (x < y) { + throw Error() + } + return "${y}K" +} + +fun box(): String { + return foo(42, 'O') +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java index a50fb8e659a..b90e4b2aaa4 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -367,6 +367,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("kt11163.kt") + public void testKt11163() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/binaryOp/kt11163.kt"); + doTest(fileName); + } + @TestMetadata("kt6747_identityEquals.kt") public void testKt6747_identityEquals() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/binaryOp/kt6747_identityEquals.kt");