diff --git a/translator/.idea/uiDesigner.xml b/translator/.idea/uiDesigner.xml
new file mode 100644
index 00000000000..e96534fb27b
--- /dev/null
+++ b/translator/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/translator/run.sh b/translator/run.sh
new file mode 100755
index 00000000000..10b7baad87f
--- /dev/null
+++ b/translator/run.sh
@@ -0,0 +1,10 @@
+rm -f src/test/kotlin/tests/linked/*
+
+/usr/lib/jvm/default-java/bin/java -Didea.launcher.port=7540 -Didea.launcher.bin.path=/opt/idea-IU-145.1617.8/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/default-java/jre/lib/charsets.jar:/usr/lib/jvm/default-java/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/default-java/jre/lib/ext/dnsns.jar:/usr/lib/jvm/default-java/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/default-java/jre/lib/ext/jaccess.jar:/usr/lib/jvm/default-java/jre/lib/ext/localedata.jar:/usr/lib/jvm/default-java/jre/lib/ext/nashorn.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunec.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/default-java/jre/lib/ext/zipfs.jar:/usr/lib/jvm/default-java/jre/lib/jce.jar:/usr/lib/jvm/default-java/jre/lib/jsse.jar:/usr/lib/jvm/default-java/jre/lib/management-agent.jar:/usr/lib/jvm/default-java/jre/lib/resources.jar:/usr/lib/jvm/default-java/jre/lib/rt.jar:/home/user/Kotlin/carkot/translator/build/classes/test:/home/user/Kotlin/carkot/translator/build/classes/main:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.0.1/68cddd9aec83d23f789f72bfdc933db245c4a635/kotlin-stdlib-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler/1.0.3/5dbeb14062996a5c2208861d6364cc97a21b06b8/kotlin-compiler-1.0.3.jar:/home/user/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-runtime/1.0.1/124852ea8cdd3d89827923b5e79627e8a7c314b2/kotlin-runtime-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar:/opt/idea-IU-145.1617.8/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain TestmainKt
+
+
+
+cd src/test/kotlin/tests/linked
+rm -f main.c
+llvm-link * > run.ll
+lli run.ll
diff --git a/translator/src/test/kotlin/testmain.kt b/translator/src/test/kotlin/testmain.kt
new file mode 100644
index 00000000000..24d0cbfe1b7
--- /dev/null
+++ b/translator/src/test/kotlin/testmain.kt
@@ -0,0 +1,48 @@
+import java.io.BufferedReader
+import java.io.File
+import java.io.InputStreamReader
+
+val directory = "src/test/kotlin/tests"
+
+fun main(args: Array) {
+ val mainFileWriter = File("$directory/linked/main.c").printWriter()
+ mainFileWriter.println("#include \n" +
+ "#include \n" +
+ "#include \n\n");
+
+
+ mainFileWriter.println("\n")
+ mainFileWriter.println("int main(){")
+
+ for (input in File("$directory/input").listFiles()) {
+ val inputLine = input.readLines()
+ val outputLine = File("$directory/output/" + input.name).readLines()
+
+ for (line in 0..inputLine.count() - 1) {
+ mainFileWriter.println("\tassert (${inputLine.get(line)} == ${outputLine.get(line)} );")
+ mainFileWriter.println("\tprintf(\"OK: ${inputLine.get(line)} == ${outputLine.get(line)} \\n\");")
+ }
+ }
+ mainFileWriter.println("printf(\"TEST RESULT: OK\\n\");")
+ mainFileWriter.println("\treturn 0;")
+ mainFileWriter.println("}")
+ mainFileWriter.flush()
+
+
+ Runtime.getRuntime().exec("clang -S -emit-llvm $directory/linked/main.c -o $directory/linked/main.ll").waitFor()
+ Runtime.getRuntime().exec("rm -f $directory/linked/main.c").waitFor()
+
+ for (file in File("$directory/source").listFiles()) {
+ val res = Runtime.getRuntime().exec("/usr/lib/jvm/default-java/bin/java -Didea.launcher.port=7539 " +
+ "-Didea.launcher.bin.path=/opt/idea-IU-145.1617.8/bin -Dfile.encoding=UTF-8 " +
+ "-classpath /usr/lib/jvm/default-java/jre/lib/charsets.jar:/usr/lib/jvm/default-java/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/default-java/jre/lib/ext/dnsns.jar:/usr/lib/jvm/default-java/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/default-java/jre/lib/ext/jaccess.jar:/usr/lib/jvm/default-java/jre/lib/ext/localedata.jar:/usr/lib/jvm/default-java/jre/lib/ext/nashorn.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunec.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/default-java/jre/lib/ext/zipfs.jar:/usr/lib/jvm/default-java/jre/lib/jce.jar:/usr/lib/jvm/default-java/jre/lib/jsse.jar:/usr/lib/jvm/default-java/jre/lib/management-agent.jar:/usr/lib/jvm/default-java/jre/lib/resources.jar:/usr/lib/jvm/default-java/jre/lib/rt.jar:/home/user/Kotlin/carkot/translator/build/classes/main:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.0.1/68cddd9aec83d23f789f72bfdc933db245c4a635/kotlin-stdlib-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler/1.0.3/5dbeb14062996a5c2208861d6364cc97a21b06b8/kotlin-compiler-1.0.3.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-runtime/1.0.1/124852ea8cdd3d89827923b5e79627e8a7c314b2/kotlin-runtime-1.0.1.jar:/opt/idea-IU-145.1617.8/lib/idea_rt.jar " +
+ "com.intellij.rt.execution.application.AppMain MainKt " + file.absoluteFile)
+ res.waitFor()
+ val reader = BufferedReader(InputStreamReader(res.getInputStream()))
+ val currentFileWriter = File("$directory/linked/" + file.nameWithoutExtension + ".ll").printWriter()
+ for (line in reader.lines()) {
+ currentFileWriter.println(line)
+ }
+ currentFileWriter.flush()
+ }
+}
diff --git a/translator/src/test/kotlin/tests/input/return_1.txt b/translator/src/test/kotlin/tests/input/return_1.txt
new file mode 100644
index 00000000000..e8cc966ac61
--- /dev/null
+++ b/translator/src/test/kotlin/tests/input/return_1.txt
@@ -0,0 +1 @@
+return_test_1(101)
\ No newline at end of file
diff --git a/translator/src/test/kotlin/tests/linked/main.ll b/translator/src/test/kotlin/tests/linked/main.ll
new file mode 100644
index 00000000000..c76c889a7f1
--- /dev/null
+++ b/translator/src/test/kotlin/tests/linked/main.ll
@@ -0,0 +1,50 @@
+; ModuleID = 'src/test/kotlin/tests/linked/main.c'
+source_filename = "src/test/kotlin/tests/linked/main.c"
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+@.str = private unnamed_addr constant [26 x i8] c"return_test_1(101) == 101\00", align 1
+@.str.1 = private unnamed_addr constant [36 x i8] c"src/test/kotlin/tests/linked/main.c\00", align 1
+@__PRETTY_FUNCTION__.main = private unnamed_addr constant [11 x i8] c"int main()\00", align 1
+@.str.2 = private unnamed_addr constant [32 x i8] c"OK: return_test_1(101) == 101 \0A\00", align 1
+@.str.3 = private unnamed_addr constant [17 x i8] c"TEST RESULT: OK\0A\00", align 1
+
+; Function Attrs: nounwind uwtable
+define i32 @main() #0 {
+entry:
+ %retval = alloca i32, align 4
+ store i32 0, i32* %retval, align 4
+ %call = call i32 (i32, ...) bitcast (i32 (...)* @return_test_1 to i32 (i32, ...)*)(i32 101)
+ %cmp = icmp eq i32 %call, 101
+ br i1 %cmp, label %cond.true, label %cond.false
+
+cond.true: ; preds = %entry
+ br label %cond.end
+
+cond.false: ; preds = %entry
+ call void @__assert_fail(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.1, i32 0, i32 0), i32 9, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @__PRETTY_FUNCTION__.main, i32 0, i32 0)) #3
+ unreachable
+ ; No predecessors!
+ br label %cond.end
+
+cond.end: ; preds = %0, %cond.true
+ %call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.2, i32 0, i32 0))
+ %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.3, i32 0, i32 0))
+ ret i32 0
+}
+
+declare i32 @return_test_1(...) #1
+
+; Function Attrs: noreturn nounwind
+declare void @__assert_fail(i8*, i8*, i32, i8*) #2
+
+declare i32 @printf(i8*, ...) #1
+
+attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #2 = { noreturn nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #3 = { noreturn nounwind }
+
+!llvm.ident = !{!0}
+
+!0 = !{!"clang version 3.9.0 (trunk 274621) (llvm/trunk 274620)"}
diff --git a/translator/src/test/kotlin/tests/linked/return_1.ll b/translator/src/test/kotlin/tests/linked/return_1.ll
new file mode 100644
index 00000000000..f12dd71d30e
--- /dev/null
+++ b/translator/src/test/kotlin/tests/linked/return_1.ll
@@ -0,0 +1,8 @@
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1)
+define i32 @return_test_1(i32 %x)
+{
+%x.addr = alloca i32, align 4
+store i32 %x, i32* %x.addr, align 4
+ret i32 101
+}
+
diff --git a/translator/src/test/kotlin/tests/linked/run.ll b/translator/src/test/kotlin/tests/linked/run.ll
new file mode 100644
index 00000000000..96a7efaf4af
Binary files /dev/null and b/translator/src/test/kotlin/tests/linked/run.ll differ
diff --git a/translator/src/test/kotlin/tests/output/return_1.txt b/translator/src/test/kotlin/tests/output/return_1.txt
new file mode 100644
index 00000000000..97a55e1d749
--- /dev/null
+++ b/translator/src/test/kotlin/tests/output/return_1.txt
@@ -0,0 +1 @@
+101
\ No newline at end of file
diff --git a/translator/src/test/kotlin/tests/source/return_1.kt b/translator/src/test/kotlin/tests/source/return_1.kt
new file mode 100644
index 00000000000..c1651707bb3
--- /dev/null
+++ b/translator/src/test/kotlin/tests/source/return_1.kt
@@ -0,0 +1,3 @@
+fun return_test_1(x: Int): Int {
+ return 101
+}
\ No newline at end of file