diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java index 7f39206d738..3deff66d90c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -66,6 +66,7 @@ public class JetTypeMapper { public static final Type JL_CHAR_SEQUENCE_TYPE = Type.getObjectType("java/lang/CharSequence"); private static final Type JL_COMPARABLE_TYPE = Type.getObjectType("java/lang/Comparable"); public static final Type JL_CLASS_TYPE = Type.getObjectType("java/lang/Class"); + public static final Type JL_BOOLEAN_TYPE = Type.getObjectType("java/lang/Boolean"); public static final Type ARRAY_GENERIC_TYPE = Type.getType(Object[].class); public static final Type TUPLE0_TYPE = Type.getObjectType("jet/Tuple0"); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java index e2e1fa00be0..4469028acef 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java @@ -447,10 +447,12 @@ public abstract class StackValue { putTuple0Instance(v); return; } - if (type != Type.BOOLEAN_TYPE) { + if (type != Type.BOOLEAN_TYPE && type.equals(JetTypeMapper.TYPE_OBJECT) && type.equals(JetTypeMapper.JL_BOOLEAN_TYPE)) { throw new UnsupportedOperationException("don't know how to put a compare as a non-boolean type " + type); } putAsBoolean(v); + if(type != Type.BOOLEAN_TYPE) + box(Type.BOOLEAN_TYPE,type,v); } @Override diff --git a/compiler/testData/codegen/regressions/kt2485.kt b/compiler/testData/codegen/regressions/kt2485.kt new file mode 100644 index 00000000000..2f9a65dbdb1 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt2485.kt @@ -0,0 +1,12 @@ +fun f1(a : Any?) {} +fun f2(a : Boolean?) {} +fun f3(a : Any) {} +fun f4(a : Boolean) {} + +fun box() : String { + f1(1 == 1) + f2(1 == 1) + f3(1 == 1) + f4(1 == 1) + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java index 115c7365dac..b45561cb7c1 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java @@ -481,4 +481,9 @@ public class ClassGenTest extends CodegenTestCase { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); blackBoxMultiFile("regressions/kt2566_2.kt"); } + + public void testKt2485() { + createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); + blackBoxMultiFile("regressions/kt2485.kt"); + } }