From d9cbced38efccf177585bca0f931361380714e56 Mon Sep 17 00:00:00 2001 From: Alexey Stepanov Date: Fri, 2 Sep 2016 12:57:35 +0300 Subject: [PATCH] translator: escape store information about return on top level --- .../org/kotlinnative/translator/codegens/BlockCodegen.kt | 6 +----- .../org/kotlinnative/translator/codegens/FunctionCodegen.kt | 6 +++--- .../kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt index 75c0b40d225..24f2836a530 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt @@ -31,7 +31,6 @@ abstract class BlockCodegen(val state: TranslationState, val topLevelScopeDepth = 2 var returnType: LLVMVariable? = null - var wasReturnOnTopLevel = false fun evaluateCodeBlock(expr: PsiElement?, startLabel: LLVMLabel? = null, @@ -57,7 +56,6 @@ abstract class BlockCodegen(val state: TranslationState, else -> codeBuilder.addAnyReturn(result.type, result.toString()) } - wasReturnOnTopLevel = true } codeBuilder.addUnconditionalJump(nextIterationLabel ?: return) } @@ -1104,9 +1102,7 @@ abstract class BlockCodegen(val state: TranslationState, codeBuilder.addReturnOperator(retNativeValue) } } - if (scopeDepth == topLevelScopeDepth + 2) { - wasReturnOnTopLevel = true - } + return null } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt index 81191fc51f6..74389aecaab 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt @@ -80,9 +80,9 @@ class FunctionCodegen(state: TranslationState, generateLoadArguments() evaluateCodeBlock(function.bodyExpression, scopeDepth = topLevelScopeDepth, isBlock = function.hasBlockBody()) - if (!wasReturnOnTopLevel) - codeBuilder.addAnyReturn(returnType!!.type) - + if (returnType?.type is LLVMVoidType){ + codeBuilder.addAnyReturn(LLVMVoidType()) + } codeBuilder.addEndExpression() } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt index e4646d7eef5..e6e56d9e5df 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt @@ -44,7 +44,7 @@ class LLVMBuilder(arm: Boolean = false) { addLLVMCodeToLocalPlace("{") fun addEndExpression() = - addLLVMCodeToLocalPlace("}") + addLLVMCodeToLocalPlace("unreachable\n}") fun addAssignment(lhs: LLVMVariable, rhs: LLVMNode) = addLLVMCodeToLocalPlace("$lhs = $rhs")