diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index a8defc4e9d7..077c176cfe1 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1894,9 +1894,16 @@ public class ExpressionCodegen extends JetVisitor { if (expr instanceof JetBinaryExpression) { final JetBinaryExpression binaryExpression = (JetBinaryExpression) expr; if (binaryExpression.getOperationToken() == JetTokens.PLUS) { - invokeAppend(binaryExpression.getLeft()); - invokeAppend(binaryExpression.getRight()); - return; + JetExpression left = binaryExpression.getLeft(); + JetExpression right = binaryExpression.getRight(); + Type leftType = expressionType(left); + Type rightType = expressionType(right); + + if(leftType.equals(JetTypeMapper.JL_STRING_TYPE) && rightType.equals(JL_STRING_TYPE)) { + invokeAppend(left); + invokeAppend(right); + return; + } } } Type exprType = expressionType(expr); diff --git a/compiler/testData/codegen/regressions/kt881.jet b/compiler/testData/codegen/regressions/kt881.jet new file mode 100644 index 00000000000..ae67c84854c --- /dev/null +++ b/compiler/testData/codegen/regressions/kt881.jet @@ -0,0 +1,6 @@ +fun box() : String { + val b = 1+1 + if ("$b" != "2") return "fail" + if ("${1+1}" != "2") return "fail" + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/StringsTest.java b/compiler/tests/org/jetbrains/jet/codegen/StringsTest.java index bbba589480d..aa2a0d87277 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/StringsTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/StringsTest.java @@ -9,4 +9,8 @@ public class StringsTest extends CodegenTestCase { public void testRawStrings() throws Exception { blackBoxFile("rawStrings.jet"); } + + public void testKt881() throws Exception { + blackBoxFile("regressions/kt881.jet"); + } }