From 260bb64d8f0630f1b37bd7c9a5649e5810dd0d59 Mon Sep 17 00:00:00 2001 From: Alexey Stepanov Date: Fri, 15 Jul 2016 17:48:27 +0300 Subject: [PATCH] translator: fix reassigment, add tests --- .../org/kotlinnative/translator/llvm/LLVMBuilder.kt | 9 ++++++--- translator/src/test/kotlin/tests/input/reassigment_0.txt | 1 + translator/src/test/kotlin/tests/input/reassigment_1.txt | 1 + translator/src/test/kotlin/tests/kotlin/reassigment_0.kt | 4 ++++ translator/src/test/kotlin/tests/kotlin/reassigment_1.kt | 7 +++++++ 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 translator/src/test/kotlin/tests/input/reassigment_0.txt create mode 100644 translator/src/test/kotlin/tests/input/reassigment_1.txt create mode 100644 translator/src/test/kotlin/tests/kotlin/reassigment_0.kt create mode 100644 translator/src/test/kotlin/tests/kotlin/reassigment_1.kt 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 5d593a83912..7cc199766f0 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt @@ -134,9 +134,12 @@ class LLVMBuilder(val arm: Boolean) { } fun copyVariableValue(target: LLVMVariable, source: LLVMVariable) { - val tmp = getNewVariable(source.type, source.pointer) - llvmLocalCode.appendln("$tmp = load ${source.getType()} $source, align ${tmp.type.align}") - llvmLocalCode.appendln("store ${target.type} $tmp, ${target.getType()} $target, align ${tmp.type.align}") + var from = source + if (source.pointer > 0) { + from = getNewVariable(source.type, source.pointer) + llvmLocalCode.appendln("$from = load ${source.getType()} $source, align ${from.type.align}") + } + llvmLocalCode.appendln("store ${target.type} $from, ${target.getType()} $target, align ${from.type.align}") } fun loadArgument(llvmVariable: LLVMVariable, store: Boolean = true): LLVMVariable { diff --git a/translator/src/test/kotlin/tests/input/reassigment_0.txt b/translator/src/test/kotlin/tests/input/reassigment_0.txt new file mode 100644 index 00000000000..1f23a87f28c --- /dev/null +++ b/translator/src/test/kotlin/tests/input/reassigment_0.txt @@ -0,0 +1 @@ +reassigment_0(5) == 6 \ No newline at end of file diff --git a/translator/src/test/kotlin/tests/input/reassigment_1.txt b/translator/src/test/kotlin/tests/input/reassigment_1.txt new file mode 100644 index 00000000000..52daf32b1a9 --- /dev/null +++ b/translator/src/test/kotlin/tests/input/reassigment_1.txt @@ -0,0 +1 @@ +reassigment_1(5) == 7 \ No newline at end of file diff --git a/translator/src/test/kotlin/tests/kotlin/reassigment_0.kt b/translator/src/test/kotlin/tests/kotlin/reassigment_0.kt new file mode 100644 index 00000000000..0f0547a8490 --- /dev/null +++ b/translator/src/test/kotlin/tests/kotlin/reassigment_0.kt @@ -0,0 +1,4 @@ +fun reassigment_0(x: Int): Int { + var b = x + 1 + return b +} \ No newline at end of file diff --git a/translator/src/test/kotlin/tests/kotlin/reassigment_1.kt b/translator/src/test/kotlin/tests/kotlin/reassigment_1.kt new file mode 100644 index 00000000000..395d1db6fa9 --- /dev/null +++ b/translator/src/test/kotlin/tests/kotlin/reassigment_1.kt @@ -0,0 +1,7 @@ +fun reassigment_1(x: Int): Int { + var a = x + a = a + 1 + var b = a + 1 + b = b + 1 + return b +} \ No newline at end of file