From 4ae458abfd1a8ba7a4536759449e50f5fb75f8a7 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Fri, 23 Mar 2018 14:16:12 +0300 Subject: [PATCH] Fixed bug in DFGBuilder + test --- .../backend/konan/optimizations/DFGBuilder.kt | 7 ++++++- backend.native/tests/build.gradle | 5 +++++ .../inline/statementAsLastExprInBlock.kt | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 backend.native/tests/codegen/inline/statementAsLastExprInBlock.kt diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt index 5d221e3e06d..2395a280e6d 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt @@ -139,7 +139,12 @@ private class ExpressionValuesExtractor(val context: Context, is IrContainerExpression -> { if (expression.statements.isNotEmpty()) - forEachValue(expression.statements.last() as IrExpression, block) + forEachValue( + expression = (expression.statements.last() as? IrExpression) + ?: IrGetObjectValueImpl(expression.startOffset, expression.endOffset, + context.builtIns.unitType, context.ir.symbols.unit), + block = block + ) } is IrWhen -> expression.branches.forEach { forEachValue(it.result, block) } diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index a218a76a1fb..67ae8e9a155 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -2266,6 +2266,11 @@ task inline_getClass(type: RunKonanTest) { source = "codegen/inline/getClass.kt" } +task inline_statementAsLastExprInBlock(type: RunKonanTest) { + goldValue = "OK\n" + source = "codegen/inline/statementAsLastExprInBlock.kt" +} + task deserialized_inline0(type: RunKonanTest) { source = "serialization/deserialized_inline0.kt" } diff --git a/backend.native/tests/codegen/inline/statementAsLastExprInBlock.kt b/backend.native/tests/codegen/inline/statementAsLastExprInBlock.kt new file mode 100644 index 00000000000..c7208ff3647 --- /dev/null +++ b/backend.native/tests/codegen/inline/statementAsLastExprInBlock.kt @@ -0,0 +1,18 @@ +package codegen.inline.statementAsLastExprInBlock + +import kotlin.test.* + +fun foo() { + val cls1: Any? = Int + val cls2: Any? = null + + cls1?.let { + if (cls2 != null) { + val zzz = 42 + } + } +} + +@Test fun runTest() { + println("OK") +}