From ba6c9be53a8462fe42b7181dd3057d4c0b5dddbf Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Tue, 10 Jan 2012 17:05:21 +0200 Subject: [PATCH] KT-958 wrong compilation of 'in' with complex expression under test --- .../src/org/jetbrains/jet/codegen/ExpressionCodegen.java | 3 ++- compiler/testData/codegen/regressions/kt958.jet | 3 +++ .../org/jetbrains/jet/codegen/ControlStructuresTest.java | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/regressions/kt958.jet diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 244122199e0..fbdec54b7f9 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1551,13 +1551,14 @@ public class ExpressionCodegen extends JetVisitor { private StackValue generateIn(JetBinaryExpression expression) { JetExpression expr = expression.getLeft(); - StackValue leftValue = gen(expr); if(isIntRangeExpr(expression.getRight())) { + StackValue leftValue = StackValue.expression(Type.INT_TYPE, expression.getLeft(), this); JetBinaryExpression rangeExpression = (JetBinaryExpression) expression.getRight(); boolean inverted = expression.getOperationReference().getReferencedNameElementType() == JetTokens.NOT_IN; getInIntRange(leftValue, rangeExpression, inverted); } else { + StackValue leftValue = gen(expr); FunctionDescriptor op = (FunctionDescriptor) bindingContext.get(BindingContext.REFERENCE_TARGET, expression.getOperationReference()); assert op != null; leftValue.put(asmType(op.getValueParameters().get(0).getOutType()), v); diff --git a/compiler/testData/codegen/regressions/kt958.jet b/compiler/testData/codegen/regressions/kt958.jet new file mode 100644 index 00000000000..bc5fceff9f5 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt958.jet @@ -0,0 +1,3 @@ +fun test() = 239 + +fun box() = if(test() in 239..240) "OK" else "fail" \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java b/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java index 36e3fe909f0..eb8e8b1aa3e 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java @@ -241,6 +241,11 @@ public class ControlStructuresTest extends CodegenTestCase { // System.out.println(generateToText()); } + public void testKt958() throws Exception { + blackBoxFile("regressions/kt958.jet"); +// System.out.println(generateToText()); + } + public void testQuicksort() throws Exception { blackBoxFile("controlStructures/quicksort.jet"); // System.out.println(generateToText());