Giter VIP home page Giter VIP logo

jetbrains / kotlin-native Goto Github PK

View Code? Open in Web Editor NEW
7.0K 256.0 570.0 89.82 MB

Kotlin/Native infrastructure

License: Apache License 2.0

Kotlin 60.14% C 3.38% Shell 0.13% Java 0.03% C++ 7.43% Groovy 0.72% Pascal 0.01% Batchfile 0.04% JavaScript 0.11% Objective-C 1.82% Objective-C++ 0.76% Python 0.16% HTML 0.01% Swift 25.20% CSS 0.01% CMake 0.02% Dockerfile 0.01% EJS 0.03%
kotlin compiler llvm objective-c c

kotlin-native's Introduction

official project

Kotlin/Native

The development of Kotlin/Native was moved to https://github.com/JetBrains/kotlin. Because of that, this repository was archived.

Instead of creating new issues in this repository or commenting the existing ones, please use other ways to communicate: #4079

kotlin-native's People

Contributors

alejes avatar alexander-gorshenev avatar alexanderprendota avatar anton-bannykh avatar b1ggdave avatar ddolovov avatar dead-off avatar dsavvinov avatar e5l avatar eabatalov avatar fkistner avatar goodwinnk avatar homuroll avatar ilmat192 avatar ilya-g avatar kishmakov avatar knebekaizer avatar konstantinanisimov avatar matklad avatar msink avatar olonho avatar pavelpunegov avatar projedi avatar qurbonzoda avatar romanart avatar sbogolepov avatar stefma avatar svyatoslavscherbina avatar udalov avatar vvlevchenko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kotlin-native's Issues

Convert offset to void *pointer

Some api's expect offsets as a void *pointer parameter. It would be nice if there was an easy way to convert an offset (Long) to a pointer (or maybe there is but I haven't found it yet).

For example, the opengl api has the following function glVertexAttribPointer

void glVertexAttribPointer(	
        GLuint index,
 	GLint size,
 	GLenum type,
 	GLboolean normalized,
 	GLsizei stride,
 	const GLvoid * pointer);

The last parameter is an offset into the current array buffer. So it doesn't actually point to something in memory.

After some searching I got it working, at the moment I call it like this:

glVertexAttribPointer(
                  info.location,
                  info.numElements,
                  GL_FLOAT,
                  0.toByte(),
                  verticesBlockSize * 4,
                  interpretCPointer<EmptyClass>(nativeNullPtr.plus(info.offset * 4L)))

EmptyClass is defined as follows:

class EmptyClass(override val rawPtr: NativePtr) : CPointed

It has to be empty so kotlin doesn't actually try to interpret it (I assume that an illegal memory access caused the crashes I experienced).

So it would be nice if there was an easier way to do this.

Compiled output file ends with ".kexe" on Windows

Hello,

I just downloaded the repo as zip file and followed the instructions and tested the native compiler to see if it is working.

I tried compiling this code:
The file name is HelloWorld.kt:
fun main(args: Array) {
println("Hello, World!")
}

When compiling using the native Kotlin compiler using the command
kotlinc HelloWorld.kt -o HelloWorld

I get a compiled file HelloWord.kexe which will not run unless I rename it to HelloWorld.exe

The version of the Kotlin Native compiler is
info: kotlinc-native 1.1.4-dev-626 (JRE 1.8.0_102-b14)

Is this a feature or a bug?

Compilation error on csvparser sample

I get this build.sh compilation error on Ubuntu 16.04.

/home/camabeh/Git/Download/kotlin-native/dist/dependencies/clang-llvm-3.9.0-linux-x86-64/bin/clang -D_POSIX_SOURCE -isystem /home/camabeh/Git/Download/kotlin-native/dist/dependencies/clang-llvm-3.9.0-linux-x86-64/lib/clang/3.9.0/include --gcc-toolchain=/home/camabeh/Git/Download/kotlin-native/dist/dependencies/target-gcc-toolchain-3-linux-x86-64 -L/home/camabeh/Git/Download/kotlin-native/dist/dependencies/clang-llvm-3.9.0-linux-x86-64/lib -B/home/camabeh/Git/Download/kotlin-native/dist/dependencies/target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot/../bin --sysroot=/home/camabeh/Git/Download/kotlin-native/dist/dependencies/target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot  -emit-llvm -c stdio.kt.bc-build/natives/cstubs.c -o stdio.kt.bc-build/natives/cstubs.bc
clang-3.9: warning: argument unused during compilation: '-L/home/camabeh/Git/Download/kotlin-native/dist/dependencies/clang-llvm-3.9.0-linux-x86-64/lib'
stdio.kt.bc-build/natives/cstubs.c:37:63: error: expected expression
    return (int32_t) (_IO_ftrylockfile((struct _IO_FILE*)arg0));
                                                              ^
1 error generated.
Exception in thread "main" java.lang.Error: Process finished with non-zero exit code: 1
        at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.runExpectingSuccess(main.kt:106)
        at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.runCmd(main.kt:152)
        at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processLib(main.kt:392)
        at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.main(main.kt:37)

GTK sample uses old architecture

The GTK example appears to use the old Gtk2 way of working by setting things up and then invoking the mainloop. The Gtk3 way of doing things is to use an Application instance and an AppllcationWindow instance and then set things running via the Application.

I'll put together an alternate.

Provide Support For ARM Microcontrollers

LLVM has support for targeting ARM Microcontrollers like the Cortex M3 and M4 for example. Kotlin Native should have the ARM microcontrollers as the next target. Many of the ARM microcontroller boards provide standard C libraries to cover low level HW access.

One ARM microcontroller board that would be a good candidate to get Kotlin Native working on is the STM 32 F4 Discovery. Some companies like Samsung have successfully used LLVM to target ARM microcontrollers.

Segfaults with primitive types and virtual method calls

I was running into some issues implementing a type hierarchy and boiled down a test case that reproduces the issue for me. The following code complies cleanly but segfaults at runtime for me, on kotlin-native 0.1 and 0.2:

interface Matrix<T> {
    operator fun set(i: Int, v: T)
    operator fun set(i: Int, j: Int, v: T)
    operator fun get(i: Int, j: Int): T
    operator fun get(i: Int): T
}
// Things work if this intermediate class isnt here, and DoubleMatrix descends from Matrix directly
abstract class MatrixBase<T>: Matrix<T> {}

abstract class DoubleMatrix : MatrixBase<Double>() {
}

class DefaultDoubleMatrix (val rows: Int,
                           val cols: Int): DoubleMatrix() {
    val storage = DoubleArray(rows*cols)

    override fun set(i: Int, v: Double) {
        storage[i] = v
    }
    override fun set(i: Int, j: Int, v: Double) {
        storage[cols*i+j] = v
    }
    override fun get(i: Int, j: Int): Double {
        return storage[cols*i+j]
    }
    override fun get(i: Int): Double
            = storage[i]
}


// Things work if return type is DefaultDoubleMatrix instead
fun makeDoubleMatrix(): DoubleMatrix = DefaultDoubleMatrix(3,3)

fun main(args: Array<String>) {
    val a = makeDoubleMatrix()
    // This causes the println below to be 0, then segfaults
    a[0] = 2.4
    // This segfaults
    a[0,0]=2.5

    println("${a[0]}")
}

Performance

Any chances for code size and performance improvements?

As is, it completely unusable in systems with limites resources, like embedded and IoT.
16x bigger compared to plain C...

(all optimizations enabled)

plain C:

#define UNICODE
#include <windows.h>

int main(int argc, char **argv) {
    MessageBox(NULL, TEXT("Clang говорит:\nЗДРАВСТВУЙ МИР!\n"),
            TEXT("Заголовок окна"), MB_YESNOCANCEL | MB_ICONQUESTION);
    return 0;
}

tanslates to 50 bytes:

004015B0 ; int __cdecl main(int argc, char **argv)
004015B0         public main
004015B0 main    proc near                       ; CODE XREF: __tmainCRTStartup+243�p
004015B0 argv = rdx                              ; char **
004015B0         push    rbp
004015B1         sub     rsp, 20h
004015B5         lea     rbp, [rsp+20h]
004015BA         call    __main
004015BF         lea     rdx, L_str_1            ; "Clang говорит:\nЗДРАВСТВ"...
004015C6         lea     r8, L_str_2             ; "Заголовок окна"
004015CD         xor     ecx, ecx                ; uType
004015CF         mov     r9d, 23h
004015D5         call    cs:__imp_MessageBoxW
004015DB         xor     eax, eax
004015DD         add     rsp, 20h
004015E1         pop     rbp
004015E2         retn
004015E2 main    endp

Kotlin-Native:

import win32.*

fun main(args: Array<String>) {
    MessageBoxW(null, "Konan говорит:\nЗДРАВСТВУЙ МИР!\n",
            "Заголовок окна", MB_YESNOCANCEL or MB_ICONQUESTION)
}

translates to 813 bytes:

00410D20 Konan_start proc near ; CODE XREF: main:loc_40D51A�p
00410D20
00410D20 var_F0  = xmmword ptr -0F0h
00410D20 var_E0  = xmmword ptr -0E0h
00410D20 var_D0  = xmmword ptr -0D0h
00410D20 var_C0  = qword ptr -0C0h
00410D20 var_B8  = qword ptr -0B8h
00410D20 var_B0  = qword ptr -0B0h
00410D20 var_A8  = qword ptr -0A8h
00410D20 var_A0  = xmmword ptr -0A0h
00410D20 var_90  = xmmword ptr -90h
00410D20 var_80  = xmmword ptr -80h
00410D20 var_70  = xmmword ptr -70h
00410D20 var_60  = xmmword ptr -60h
00410D20 var_48  = qword ptr -48h
00410D20 var_40  = xmmword ptr -40h
00410D20
00410D20         push    rbp
00410D21         push    r15
00410D23         push    r14
00410D25         push    rsi
00410D26         push    rdi
00410D27         push    rbx
00410D28         sub     rsp, 0E8h
00410D2F         lea     rbp, [rsp+80h]
00410D37         xorps   xmm0, xmm0
00410D3A         movaps  [rbp+90h+var_A0], xmm0
00410D3E         mov     [rbp+90h+var_48], 0
00410D46         movaps  [rbp+90h+var_D0], xmm0
00410D4A         movaps  [rbp+90h+var_E0], xmm0
00410D4E         movaps  [rbp+90h+var_F0], xmm0
00410D52         mov     [rbp+90h+var_C0], 0
00410D5A         lea     rdx, [rbp+90h+var_F0+8]
00410D5E         lea     rcx, ktypeglobal_kotlin_text_StringBuilder_internal
00410D65         call    AllocInstance
00410D6A         mov     rsi, rax
00410D6D         mov     qword ptr [rbp+90h+var_40], 0
00410D75         mov     edx, 0Ah
00410D7A         mov     rcx, rsi
00410D7D         call    kfun_kotlin_text_StringBuilder__init__kotlin_Int_Reference
00410D82         lea     rdi, [rbp+90h+var_E0]
00410D86         lea     rcx, [rbp+90h+var_40]
00410D8A         mov     edx, 1
00410D8F         call    LeaveFrame
00410D94         lea     rdx, str_Konan_govorit_
00410D9B         mov     rcx, rsi
00410D9E         mov     r8, rdi
00410DA1         call    kfun_kotlin_text_StringBuilder_append_kotlin_String_Reference
00410DA6         lea     r8, [rbp+90h+var_E0+8]
00410DAA         lea     rdx, str_Ln
00410DB1         mov     rcx, rsi
00410DB4         call    kfun_kotlin_text_StringBuilder_append_kotlin_String_Reference
00410DB9         lea     r8, [rbp+90h+var_D0]
00410DBD         lea     rdx, str_ZDRAVSTVUI_MIR_
00410DC4         mov     rcx, rsi
00410DC7         call    kfun_kotlin_text_StringBuilder_append_kotlin_String_Reference
00410DCC         lea     r8, [rbp+90h+var_D0+8]
00410DD0         lea     rdx, str_Ln
00410DD7         mov     rcx, rsi
00410DDA         call    kfun_kotlin_text_StringBuilder_append_kotlin_String_Reference
00410DDF         lea     rdx, [rbp+90h+var_C0]
00410DE3         mov     rcx, rsi
00410DE6         call    kfun_kotlin_text_StringBuilder_toString__Reference
00410DEB         mov     rdi, rax
00410DEE         mov     qword ptr [rbp+90h+var_90], 0
00410DF6         lea     rcx, [rbp+90h+var_90]
00410DFA         mov     edx, 1
00410DFF         call    LeaveFrame
00410E04         mov     qword ptr [rbp+90h+var_90], 0
00410E0C         lea     rcx, [rbp+90h+var_90]
00410E10         mov     edx, 1
00410E15         call    LeaveFrame
00410E1A         call    Kotlin_Int_or_Int
00410E1F         mov     r14d, eax
00410E22         xorps   xmm0, xmm0
00410E25         movaps  [rbp+90h+var_60], xmm0
00410E29         movaps  [rbp+90h+var_70], xmm0
00410E2D         movaps  [rbp+90h+var_80], xmm0
00410E31         movaps  [rbp+90h+var_90], xmm0
00410E35         lea     rdx, [rbp+90h+var_90+8]
00410E39         lea     rcx, ktypeglobal_kotlinx_cinterop_MemScope_internal
00410E40         call    AllocInstance
00410E45         mov     rsi, rax
00410E48         mov     rcx, rsi
00410E4B         call    kfun_kotlinx_cinterop_MemScope__init___Reference
00410E50         lea     r15, [rbp+90h+var_80]
00410E54         mov     qword ptr [rbp+90h+var_40], 0
00410E5C         lea     rcx, [rbp+90h+var_40]
00410E60         mov     edx, 1
00410E65         call    LeaveFrame
00410E6A         test    rdi, rdi
00410E6D         jz      short loc_410EC6
00410E6F         lea     rdx, [rbp+90h+var_80+8]
00410E73         mov     rcx, rdi
00410E76         call    kfun_kotlinx_cinterop__get_wcstr_@kotlin_String___Reference
00410E7B         mov     rdi, rax
00410E7E         test    rdi, rdi
00410E81         jz      short loc_410EC6
00410E83         lea     rcx, [rbp+90h+var_70]
00410E87         mov     qword ptr [rbp+90h+var_40], 0
00410E8F         mov     rdx, rsi
00410E92         call    UpdateReturnRef
00410E97         lea     rcx, [rbp+90h+var_40]
00410E9B         mov     edx, 1
00410EA0         call    LeaveFrame
00410EA5         mov     rax, [rdi]
00410EA8         mov     rax, [rax+78h]
00410EAC         mov     rcx, rdi
00410EAF         mov     rdx, rsi
00410EB2         call    rax
00410EB4         mov     rdi, rax
00410EB7         mov     qword ptr [rbp+90h+var_40], 0
00410EBF         test    rdi, rdi
00410EC2         jnz     short loc_410ED0
00410EC4         jmp     short loc_410ECE
00410EC6 ; ---------------------------------------------------------------------------
00410EC6
00410EC6 loc_410EC6:         ; CODE XREF: Konan_start+14D�j
00410EC6                     ; Konan_start+161�j
00410EC6         mov     qword ptr [rbp+90h+var_40], 0
00410ECE
00410ECE loc_410ECE:         ; CODE XREF: Konan_start+1A4�j
00410ECE         xor     edi, edi
00410ED0
00410ED0 loc_410ED0:         ; CODE XREF: Konan_start+1A2�j
00410ED0         lea     rbx, [rbp+90h+var_70+8]
00410ED4         lea     rcx, [rbp+90h+var_40]
00410ED8         mov     edx, 1
00410EDD         call    LeaveFrame
00410EE2         lea     rcx, str_Zagolovok_okna
00410EE9         mov     rdx, rbx
00410EEC         call    kfun_kotlinx_cinterop__get_wcstr_@kotlin_String___Reference
00410EF1         mov     rbx, rax
00410EF4         test    rbx, rbx
00410EF7         jz      short loc_410F3C
00410EF9         lea     rcx, [rbp+90h+var_60]
00410EFD         mov     qword ptr [rbp+90h+var_40], 0
00410F05         mov     rdx, rsi
00410F08         call    UpdateReturnRef
00410F0D         lea     rcx, [rbp+90h+var_40]
00410F11         mov     edx, 1
00410F16         call    LeaveFrame
00410F1B         mov     rax, [rbx]
00410F1E         mov     rax, [rax+78h]
00410F22         mov     rcx, rbx
00410F25         mov     rdx, rsi
00410F28         call    rax
00410F2A         mov     rbx, rax
00410F2D         mov     qword ptr [rbp+90h+var_40], 0
00410F35         test    rbx, rbx
00410F38         jnz     short loc_410F46
00410F3A         jmp     short loc_410F44
00410F3C ; ---------------------------------------------------------------------------
00410F3C
00410F3C loc_410F3C:         ; CODE XREF: Konan_start+1D7�j
00410F3C         mov     qword ptr [rbp+90h+var_40], 0
00410F44
00410F44 loc_410F44:         ; CODE XREF: Konan_start+21A�j
00410F44         xor     ebx, ebx
00410F46
00410F46 loc_410F46:         ; CODE XREF: Konan_start+218�j
00410F46         lea     rcx, [rbp+90h+var_40]
00410F4A         mov     edx, 1
00410F4F         call    LeaveFrame
00410F54         xor     r15d, r15d
00410F57         xor     ecx, ecx
00410F59         mov     rdx, rdi
00410F5C         mov     r8, rbx
00410F5F         mov     r9d, r14d
00410F62         call    win32_kni_MessageBoxW
00410F67         mov     edi, eax
00410F69         mov     rcx, rsi
00410F6C         call    kfun_kotlinx_cinterop_MemScope_clear__
00410F71         lea     rsi, [rbp+90h+var_60+8]
00410F75         xorps   xmm0, xmm0
00410F78         movaps  [rbp+90h+var_40], xmm0
00410F7C         lea     rdx, [rbp+90h+var_40+8]
00410F80         lea     rcx, ktypeglobal_konan_internal_IntBox_internal
00410F87         call    AllocInstance
00410F8C         mov     rbx, rax
00410F8F         mov     [rbp+90h+var_A8], 0
00410F97         mov     [rbp+90h+var_B0], 0
00410F9F         mov     [rbp+90h+var_B8], 0
00410FA7         lea     rcx, [rbp+90h+var_B8]
00410FAB         mov     edx, 1
00410FB0         call    LeaveFrame
00410FB5         lea     rcx, [rbp+90h+var_B0]
00410FB9         mov     edx, 1
00410FBE         call    LeaveFrame
00410FC3         mov     [rbx+10h], edi
00410FC6         lea     rcx, [rbp+90h+var_A8]
00410FCA         mov     edx, 1
00410FCF         call    LeaveFrame
00410FD4         mov     rcx, rsi
00410FD7         mov     rdx, rbx
00410FDA         call    UpdateReturnRef
00410FDF         lea     rcx, [rbp+90h+var_40]
00410FE3         mov     edx, 2
00410FE8         call    LeaveFrame
00410FED         mov     qword ptr [rbp+90h+var_40], 0
00410FF5         lea     rcx, [rbp+90h+var_40]
00410FF9         mov     edx, 1
00410FFE         call    LeaveFrame
00411003         lea     rcx, [rbp+90h+var_90]
00411007         mov     edx, 8
0041100C         call    LeaveFrame
00411011         lea     rcx, [rbp+90h+var_F0]
00411015         mov     edx, 7
0041101A         call    LeaveFrame
0041101F         lea     rcx, [rbp+90h+var_48]
00411023         mov     edx, 1
00411028         call    LeaveFrame
0041102D
0041102D loc_41102D:         ; CODE XREF: .text:00000000004110F4�j
0041102D         lea     rcx, [rbp+90h+var_A0]
00411031         mov     edx, 2
00411036         call    LeaveFrame
0041103B         mov     eax, r15d
0041103E         add     rsp, 0E8h
00411045         pop     rbx
00411046         pop     rdi
00411047         pop     rsi
00411048         pop     r14
0041104A         pop     r15
0041104C         pop     rbp
0041104D         retn
0041104D Konan_start endp

Gradle Plugin Tasks Restructuring

I'm writing a Gradle plugin that generates a source and then runs Kotlin/Native.

I'm using build.dependsOn("genMetadata"), but the problem is that compileKonanSample runs before genMetadata. I cannot use compileKonanSample.dependsOn(...) because this is in a plugin, and the name might be different.

I propose that a solution might be that instead of having this structure:

build
   dependsOn: compileKonanSample
   dependsOn: compileKonanFoo

This would be more logical:

build
   dependsOn: compileKonan
      dependsOn: compileKonanSample
      dependsOn: compileKonanFoo

This would fix the problem because I could then just use compileKonan.dependsOn("genMetadata"), which is a safe call because compileKonan doesn't change.

If I have time, I might try implementing this in a PR

Compiler cannot handle big libraries like GTK

Looks like it fails when looking for imports from big libraries

gtk.gtk_application_new("demo.app.Test", G_APPLICATION_FLAGS_NONE)

org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException: Protocol message was too large.  May be malicious.  Use CodedInputStream.setSizeLimit() to increase the size limit.
	at org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException.sizeLimitExceeded(InvalidProtocolBufferException.java:110)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.tryRefillBuffer(CodedInputStream.java:1131)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.refillBuffer(CodedInputStream.java:1081)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.ensureAvailable(CodedInputStream.java:1068)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readRawBytesSlowPath(CodedInputStream.java:1203)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readString(CodedInputStream.java:383)
	at org.jetbrains.kotlin.protobuf.FieldSet.readPrimitiveField(FieldSet.java:568)
	at org.jetbrains.kotlin.protobuf.GeneratedMessageLite.parseUnknownField(GeneratedMessageLite.java:608)
	at org.jetbrains.kotlin.protobuf.GeneratedMessageLite.access$100(GeneratedMessageLite.java:49)
	at org.jetbrains.kotlin.protobuf.GeneratedMessageLite$ExtendableMessage.parseUnknownField(GeneratedMessageLite.java:246)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Type.<init>(ProtoBuf.java:4555)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Type.<init>(ProtoBuf.java:4513)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Type$1.parsePartialFrom(ProtoBuf.java:4685)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Type$1.parsePartialFrom(ProtoBuf.java:4680)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readMessage(CodedInputStream.java:495)
	at org.jetbrains.kotlin.serialization.ProtoBuf$TypeTable.<init>(ProtoBuf.java:12330)
	at org.jetbrains.kotlin.serialization.ProtoBuf$TypeTable.<init>(ProtoBuf.java:12278)
	at org.jetbrains.kotlin.serialization.ProtoBuf$TypeTable$1.parsePartialFrom(ProtoBuf.java:12365)
	at org.jetbrains.kotlin.serialization.ProtoBuf$TypeTable$1.parsePartialFrom(ProtoBuf.java:12360)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readMessage(CodedInputStream.java:495)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Class.<init>(ProtoBuf.java:8338)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Class.<init>(ProtoBuf.java:8151)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Class$1.parsePartialFrom(ProtoBuf.java:8418)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Class$1.parsePartialFrom(ProtoBuf.java:8413)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readMessage(CodedInputStream.java:495)
	at org.jetbrains.kotlin.serialization.KonanLinkData$Classes.<init>(KonanLinkData.java:2594)
	at org.jetbrains.kotlin.serialization.KonanLinkData$Classes.<init>(KonanLinkData.java:2521)
	at org.jetbrains.kotlin.serialization.KonanLinkData$Classes$1.parsePartialFrom(KonanLinkData.java:2627)
	at org.jetbrains.kotlin.serialization.KonanLinkData$Classes$1.parsePartialFrom(KonanLinkData.java:2622)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readMessage(CodedInputStream.java:495)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment.<init>(KonanLinkData.java:1610)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment.<init>(KonanLinkData.java:1513)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment$1.parsePartialFrom(KonanLinkData.java:1642)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment$1.parsePartialFrom(KonanLinkData.java:1637)
	at org.jetbrains.kotlin.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:192)
	at org.jetbrains.kotlin.protobuf.AbstractParser.parseFrom(AbstractParser.java:209)
	at org.jetbrains.kotlin.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment.parseFrom(KonanLinkData.java:1911)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanSerializationUtilKt.deserializePackageFragment(KonanSerializationUtil.kt:118)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanSerializationUtilKt$deserializeModule$provider$1.invoke(KonanSerializationUtil.kt:138)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanSerializationUtilKt$deserializeModule$provider$1.invoke(KonanSerializationUtil.kt)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment$proto$2.invoke(KonanPackageFragment.kt:37)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment$proto$2.invoke(KonanPackageFragment.kt:28)
	at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:130)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment.getProto(KonanPackageFragment.kt)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment.computeMemberScope(KonanPackageFragment.kt:49)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment.computeMemberScope(KonanPackageFragment.kt:28)
	at org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment$memberScope$1.invoke(DeserializedPackageFragment.kt:37)
	at org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment$memberScope$1.invoke(DeserializedPackageFragment.kt:28)
	at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:323)
	at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:364)
	at org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment.getMemberScope(DeserializedPackageFragment.kt:43)
	at org.jetbrains.kotlin.descriptors.impl.LazyPackageViewDescriptorImpl$memberScope$1.invoke(LazyPackageViewDescriptorImpl.kt:48)
	at org.jetbrains.kotlin.descriptors.impl.LazyPackageViewDescriptorImpl$memberScope$1.invoke(LazyPackageViewDescriptorImpl.kt:32)
	at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:323)
	at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:364)
	at org.jetbrains.kotlin.resolve.scopes.LazyScopeAdapter.getWorkerScope(LazyScopeAdapter.kt:23)
	at org.jetbrains.kotlin.resolve.scopes.AbstractScopeAdapter.getContributedFunctions(AbstractScopeAdapter.kt:40)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerLevelsKt.getContributedFunctionsAndConstructors(TowerLevels.kt:269)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerLevelsKt.access$getContributedFunctionsAndConstructors(TowerLevels.kt:1)
	at org.jetbrains.kotlin.resolve.calls.tower.QualifierScopeTowerLevel.getFunctions(TowerLevels.kt:164)
	at org.jetbrains.kotlin.resolve.calls.tower.QualifierScopeTowerLevel.getFunctions(TowerLevels.kt:152)
	at org.jetbrains.kotlin.resolve.calls.tower.ScopeTowerProcessorsKt$createSimpleFunctionProcessor$1.invoke(ScopeTowerProcessors.kt:194)
	at org.jetbrains.kotlin.resolve.calls.tower.ScopeTowerProcessorsKt$createSimpleFunctionProcessor$1.invoke(ScopeTowerProcessors.kt)
	at org.jetbrains.kotlin.resolve.calls.tower.QualifierScopeTowerProcessor.simpleProcess(ScopeTowerProcessors.kt:90)
	at org.jetbrains.kotlin.resolve.calls.tower.AbstractSimpleScopeTowerProcessor.process(ScopeTowerProcessors.kt:48)
	at org.jetbrains.kotlin.resolve.calls.tower.CompositeScopeTowerProcessor.process(ScopeTowerProcessors.kt:39)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver.processTowerData(TowerResolver.kt:189)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver.access$processTowerData(TowerResolver.kt:71)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver$run$1.invoke(TowerResolver.kt:106)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver.run(TowerResolver.kt:120)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver.runResolve(TowerResolver.kt:76)
	at org.jetbrains.kotlin.resolve.calls.tower.NewResolutionOldInference.runResolution(NewResolutionOldInference.kt:174)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.doResolveCall(CallResolver.java:609)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.doResolveCallOrGetCachedResults(CallResolver.java:519)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.lambda$computeTasksAndResolveCall$0(CallResolver.java:185)
	at org.jetbrains.kotlin.util.PerformanceCounter.time(PerformanceCounter.kt:90)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.computeTasksAndResolveCall(CallResolver.java:183)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.computeTasksAndResolveCall(CallResolver.java:173)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.resolveFunctionCall(CallResolver.java:276)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getResolvedCallForFunction(CallExpressionResolver.kt:91)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getCallExpressionTypeInfoWithoutFinalTypeCheck(CallExpressionResolver.kt:197)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getUnsafeSelectorTypeInfo(CallExpressionResolver.kt:306)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getSafeOrUnsafeSelectorTypeInfo(CallExpressionResolver.kt:336)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getQualifiedExpressionTypeInfo(CallExpressionResolver.kt:425)
	at org.jetbrains.kotlin.types.expressions.BasicExpressionTypingVisitor.visitQualifiedExpression(BasicExpressionTypingVisitor.java:776)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.visitQualifiedExpression(ExpressionTypingVisitorDispatcher.java:380)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher$ForDeclarations.visitQualifiedExpression(ExpressionTypingVisitorDispatcher.java:54)
	at org.jetbrains.kotlin.psi.KtVisitor.visitDotQualifiedExpression(KtVisitor.java:298)
	at org.jetbrains.kotlin.psi.KtDotQualifiedExpression.accept(KtDotQualifiedExpression.kt:31)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.lambda$getTypeInfo$0(ExpressionTypingVisitorDispatcher.java:182)
	at org.jetbrains.kotlin.util.PerformanceCounter.time(PerformanceCounter.kt:90)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:171)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:142)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:154)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeInfo(ExpressionTypingServices.java:116)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeInfo(ExpressionTypingServices.java:96)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getType(ExpressionTypingServices.java:132)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.safeGetType(ExpressionTypingServices.java:82)
	at org.jetbrains.kotlin.resolve.VariableTypeAndInitializerResolver.resolveInitializerType(VariableTypeAndInitializerResolver.kt:151)
	at org.jetbrains.kotlin.resolve.VariableTypeAndInitializerResolver.resolveTypeNullable(VariableTypeAndInitializerResolver.kt:91)
	at org.jetbrains.kotlin.resolve.VariableTypeAndInitializerResolver.resolveType(VariableTypeAndInitializerResolver.kt:56)
	at org.jetbrains.kotlin.resolve.LocalVariableResolver.resolveLocalVariableDescriptor(LocalVariableResolver.kt:167)
	at org.jetbrains.kotlin.resolve.LocalVariableResolver.process(LocalVariableResolver.kt:74)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorForStatements.visitProperty(ExpressionTypingVisitorForStatements.java:110)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorForStatements.visitProperty(ExpressionTypingVisitorForStatements.java:61)
	at org.jetbrains.kotlin.psi.KtProperty.accept(KtProperty.java:57)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.lambda$getTypeInfo$0(ExpressionTypingVisitorDispatcher.java:182)
	at org.jetbrains.kotlin.util.PerformanceCounter.time(PerformanceCounter.kt:90)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:171)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:155)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeOfLastExpressionInBlock(ExpressionTypingServices.java:314)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getBlockReturnedTypeWithWritableScope(ExpressionTypingServices.java:264)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getBlockReturnedType(ExpressionTypingServices.java:195)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getBlockReturnedType(ExpressionTypingServices.java:172)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorForStatements.visitBlockExpression(ExpressionTypingVisitorForStatements.java:416)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorForStatements.visitBlockExpression(ExpressionTypingVisitorForStatements.java:61)
	at org.jetbrains.kotlin.psi.KtBlockExpression.accept(KtBlockExpression.java:44)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.lambda$getTypeInfo$0(ExpressionTypingVisitorDispatcher.java:182)
	at org.jetbrains.kotlin.util.PerformanceCounter.time(PerformanceCounter.kt:90)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:171)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:155)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeInfo(ExpressionTypingServices.java:116)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeInfo(ExpressionTypingServices.java:96)
	at org.jetbrains.kotlin.resolve.BodyResolver.resolveAnonymousInitializer(BodyResolver.java:586)
	at org.jetbrains.kotlin.resolve.BodyResolver.resolveAnonymousInitializers(BodyResolver.java:572)
	at org.jetbrains.kotlin.resolve.BodyResolver.resolveBehaviorDeclarationBodies(BodyResolver.java:117)
	at org.jetbrains.kotlin.resolve.BodyResolver.resolveBodies(BodyResolver.java:240)
	at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer.analyzeDeclarations(LazyTopDownAnalyzer.kt:209)
	at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer.analyzeDeclarations$default(LazyTopDownAnalyzer.kt:56)
	at org.jetbrains.kotlin.backend.konan.TopDownAnalyzerFacadeForKonan.analyzeFilesWithGivenTrace(TopDownAnalyzerFacadeForKonan.kt:67)
	at org.jetbrains.kotlin.backend.konan.TopDownAnalyzerFacadeForKonan.analyzeFiles(TopDownAnalyzerFacadeForKonan.kt:48)
	at org.jetbrains.kotlin.backend.konan.NativeAnalyzer.analyze(KonanDriver.kt:40)
	at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:105)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$1.invoke(KonanDriver.kt:71)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$1.invoke(KonanDriver.kt)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:129)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:108)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profileIf(util.kt:33)
	at org.jetbrains.kotlin.backend.konan.PhaseManager.phase$backend_native_compiler(KonanPhases.kt:128)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt.runTopLevelPhases(KonanDriver.kt:69)
	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:65)
	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:51)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:172)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:120)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:51)
	at org.jetbrains.kotlin.cli.common.CLICompiler.doMainNoExit(CLICompiler.java:353)
	at org.jetbrains.kotlin.cli.common.CLICompiler.doMain(CLICompiler.java:343)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:158)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:155)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profileIf(util.kt:33)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profile(util.kt:28)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion.main(K2Native.kt:157)
	at org.jetbrains.kotlin.cli.bc.K2NativeKt.main(K2Native.kt:163)
exception: org.jetbrains.kotlin.util.KotlinFrontEndException: Exception while analyzing expression at (21,21) in /home/adrian/Development/Kotlin/Native/sdk/src/main.kt:
gtk.gtk_application_new("demo.app.Test", G_APPLICATION_FLAGS_NONE)

	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.logOrThrowException(ExpressionTypingVisitorDispatcher.java:250)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.lambda$getTypeInfo$0(ExpressionTypingVisitorDispatcher.java:221)
	at org.jetbrains.kotlin.util.PerformanceCounter.time(PerformanceCounter.kt:90)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:171)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:142)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:154)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeInfo(ExpressionTypingServices.java:116)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeInfo(ExpressionTypingServices.java:96)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getType(ExpressionTypingServices.java:132)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.safeGetType(ExpressionTypingServices.java:82)
	at org.jetbrains.kotlin.resolve.VariableTypeAndInitializerResolver.resolveInitializerType(VariableTypeAndInitializerResolver.kt:151)
	at org.jetbrains.kotlin.resolve.VariableTypeAndInitializerResolver.resolveTypeNullable(VariableTypeAndInitializerResolver.kt:91)
	at org.jetbrains.kotlin.resolve.VariableTypeAndInitializerResolver.resolveType(VariableTypeAndInitializerResolver.kt:56)
	at org.jetbrains.kotlin.resolve.LocalVariableResolver.resolveLocalVariableDescriptor(LocalVariableResolver.kt:167)
	at org.jetbrains.kotlin.resolve.LocalVariableResolver.process(LocalVariableResolver.kt:74)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorForStatements.visitProperty(ExpressionTypingVisitorForStatements.java:110)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorForStatements.visitProperty(ExpressionTypingVisitorForStatements.java:61)
	at org.jetbrains.kotlin.psi.KtProperty.accept(KtProperty.java:57)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.lambda$getTypeInfo$0(ExpressionTypingVisitorDispatcher.java:182)
	at org.jetbrains.kotlin.util.PerformanceCounter.time(PerformanceCounter.kt:90)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:171)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:155)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeOfLastExpressionInBlock(ExpressionTypingServices.java:314)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getBlockReturnedTypeWithWritableScope(ExpressionTypingServices.java:264)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getBlockReturnedType(ExpressionTypingServices.java:195)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getBlockReturnedType(ExpressionTypingServices.java:172)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorForStatements.visitBlockExpression(ExpressionTypingVisitorForStatements.java:416)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorForStatements.visitBlockExpression(ExpressionTypingVisitorForStatements.java:61)
	at org.jetbrains.kotlin.psi.KtBlockExpression.accept(KtBlockExpression.java:44)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.lambda$getTypeInfo$0(ExpressionTypingVisitorDispatcher.java:182)
	at org.jetbrains.kotlin.util.PerformanceCounter.time(PerformanceCounter.kt:90)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:171)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.getTypeInfo(ExpressionTypingVisitorDispatcher.java:155)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeInfo(ExpressionTypingServices.java:116)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingServices.getTypeInfo(ExpressionTypingServices.java:96)
	at org.jetbrains.kotlin.resolve.BodyResolver.resolveAnonymousInitializer(BodyResolver.java:586)
	at org.jetbrains.kotlin.resolve.BodyResolver.resolveAnonymousInitializers(BodyResolver.java:572)
	at org.jetbrains.kotlin.resolve.BodyResolver.resolveBehaviorDeclarationBodies(BodyResolver.java:117)
	at org.jetbrains.kotlin.resolve.BodyResolver.resolveBodies(BodyResolver.java:240)
	at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer.analyzeDeclarations(LazyTopDownAnalyzer.kt:209)
	at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer.analyzeDeclarations$default(LazyTopDownAnalyzer.kt:56)
	at org.jetbrains.kotlin.backend.konan.TopDownAnalyzerFacadeForKonan.analyzeFilesWithGivenTrace(TopDownAnalyzerFacadeForKonan.kt:67)
	at org.jetbrains.kotlin.backend.konan.TopDownAnalyzerFacadeForKonan.analyzeFiles(TopDownAnalyzerFacadeForKonan.kt:48)
	at org.jetbrains.kotlin.backend.konan.NativeAnalyzer.analyze(KonanDriver.kt:40)
	at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:105)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$1.invoke(KonanDriver.kt:71)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$1.invoke(KonanDriver.kt)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:129)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:108)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profileIf(util.kt:33)
	at org.jetbrains.kotlin.backend.konan.PhaseManager.phase$backend_native_compiler(KonanPhases.kt:128)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt.runTopLevelPhases(KonanDriver.kt:69)
	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:65)
	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:51)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:172)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:120)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:51)
	at org.jetbrains.kotlin.cli.common.CLICompiler.doMainNoExit(CLICompiler.java:353)
	at org.jetbrains.kotlin.cli.common.CLICompiler.doMain(CLICompiler.java:343)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:158)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:155)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profileIf(util.kt:33)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profile(util.kt:28)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion.main(K2Native.kt:157)
	at org.jetbrains.kotlin.cli.bc.K2NativeKt.main(K2Native.kt:163)
Caused by: org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException: Protocol message was too large.  May be malicious.  Use CodedInputStream.setSizeLimit() to increase the size limit.
	at org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException.sizeLimitExceeded(InvalidProtocolBufferException.java:110)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.tryRefillBuffer(CodedInputStream.java:1131)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.refillBuffer(CodedInputStream.java:1081)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.ensureAvailable(CodedInputStream.java:1068)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readRawBytesSlowPath(CodedInputStream.java:1203)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readString(CodedInputStream.java:383)
	at org.jetbrains.kotlin.protobuf.FieldSet.readPrimitiveField(FieldSet.java:568)
	at org.jetbrains.kotlin.protobuf.GeneratedMessageLite.parseUnknownField(GeneratedMessageLite.java:608)
	at org.jetbrains.kotlin.protobuf.GeneratedMessageLite.access$100(GeneratedMessageLite.java:49)
	at org.jetbrains.kotlin.protobuf.GeneratedMessageLite$ExtendableMessage.parseUnknownField(GeneratedMessageLite.java:246)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Type.<init>(ProtoBuf.java:4555)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Type.<init>(ProtoBuf.java:4513)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Type$1.parsePartialFrom(ProtoBuf.java:4685)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Type$1.parsePartialFrom(ProtoBuf.java:4680)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readMessage(CodedInputStream.java:495)
	at org.jetbrains.kotlin.serialization.ProtoBuf$TypeTable.<init>(ProtoBuf.java:12330)
	at org.jetbrains.kotlin.serialization.ProtoBuf$TypeTable.<init>(ProtoBuf.java:12278)
	at org.jetbrains.kotlin.serialization.ProtoBuf$TypeTable$1.parsePartialFrom(ProtoBuf.java:12365)
	at org.jetbrains.kotlin.serialization.ProtoBuf$TypeTable$1.parsePartialFrom(ProtoBuf.java:12360)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readMessage(CodedInputStream.java:495)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Class.<init>(ProtoBuf.java:8338)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Class.<init>(ProtoBuf.java:8151)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Class$1.parsePartialFrom(ProtoBuf.java:8418)
	at org.jetbrains.kotlin.serialization.ProtoBuf$Class$1.parsePartialFrom(ProtoBuf.java:8413)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readMessage(CodedInputStream.java:495)
	at org.jetbrains.kotlin.serialization.KonanLinkData$Classes.<init>(KonanLinkData.java:2594)
	at org.jetbrains.kotlin.serialization.KonanLinkData$Classes.<init>(KonanLinkData.java:2521)
	at org.jetbrains.kotlin.serialization.KonanLinkData$Classes$1.parsePartialFrom(KonanLinkData.java:2627)
	at org.jetbrains.kotlin.serialization.KonanLinkData$Classes$1.parsePartialFrom(KonanLinkData.java:2622)
	at org.jetbrains.kotlin.protobuf.CodedInputStream.readMessage(CodedInputStream.java:495)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment.<init>(KonanLinkData.java:1610)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment.<init>(KonanLinkData.java:1513)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment$1.parsePartialFrom(KonanLinkData.java:1642)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment$1.parsePartialFrom(KonanLinkData.java:1637)
	at org.jetbrains.kotlin.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:192)
	at org.jetbrains.kotlin.protobuf.AbstractParser.parseFrom(AbstractParser.java:209)
	at org.jetbrains.kotlin.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
	at org.jetbrains.kotlin.serialization.KonanLinkData$PackageFragment.parseFrom(KonanLinkData.java:1911)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanSerializationUtilKt.deserializePackageFragment(KonanSerializationUtil.kt:118)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanSerializationUtilKt$deserializeModule$provider$1.invoke(KonanSerializationUtil.kt:138)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanSerializationUtilKt$deserializeModule$provider$1.invoke(KonanSerializationUtil.kt)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment$proto$2.invoke(KonanPackageFragment.kt:37)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment$proto$2.invoke(KonanPackageFragment.kt:28)
	at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:130)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment.getProto(KonanPackageFragment.kt)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment.computeMemberScope(KonanPackageFragment.kt:49)
	at org.jetbrains.kotlin.backend.konan.serialization.KonanPackageFragment.computeMemberScope(KonanPackageFragment.kt:28)
	at org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment$memberScope$1.invoke(DeserializedPackageFragment.kt:37)
	at org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment$memberScope$1.invoke(DeserializedPackageFragment.kt:28)
	at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:323)
	at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:364)
	at org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment.getMemberScope(DeserializedPackageFragment.kt:43)
	at org.jetbrains.kotlin.descriptors.impl.LazyPackageViewDescriptorImpl$memberScope$1.invoke(LazyPackageViewDescriptorImpl.kt:48)
	at org.jetbrains.kotlin.descriptors.impl.LazyPackageViewDescriptorImpl$memberScope$1.invoke(LazyPackageViewDescriptorImpl.kt:32)
	at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:323)
	at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:364)
	at org.jetbrains.kotlin.resolve.scopes.LazyScopeAdapter.getWorkerScope(LazyScopeAdapter.kt:23)
	at org.jetbrains.kotlin.resolve.scopes.AbstractScopeAdapter.getContributedFunctions(AbstractScopeAdapter.kt:40)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerLevelsKt.getContributedFunctionsAndConstructors(TowerLevels.kt:269)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerLevelsKt.access$getContributedFunctionsAndConstructors(TowerLevels.kt:1)
	at org.jetbrains.kotlin.resolve.calls.tower.QualifierScopeTowerLevel.getFunctions(TowerLevels.kt:164)
	at org.jetbrains.kotlin.resolve.calls.tower.QualifierScopeTowerLevel.getFunctions(TowerLevels.kt:152)
	at org.jetbrains.kotlin.resolve.calls.tower.ScopeTowerProcessorsKt$createSimpleFunctionProcessor$1.invoke(ScopeTowerProcessors.kt:194)
	at org.jetbrains.kotlin.resolve.calls.tower.ScopeTowerProcessorsKt$createSimpleFunctionProcessor$1.invoke(ScopeTowerProcessors.kt)
	at org.jetbrains.kotlin.resolve.calls.tower.QualifierScopeTowerProcessor.simpleProcess(ScopeTowerProcessors.kt:90)
	at org.jetbrains.kotlin.resolve.calls.tower.AbstractSimpleScopeTowerProcessor.process(ScopeTowerProcessors.kt:48)
	at org.jetbrains.kotlin.resolve.calls.tower.CompositeScopeTowerProcessor.process(ScopeTowerProcessors.kt:39)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver.processTowerData(TowerResolver.kt:189)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver.access$processTowerData(TowerResolver.kt:71)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver$run$1.invoke(TowerResolver.kt:106)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver.run(TowerResolver.kt:120)
	at org.jetbrains.kotlin.resolve.calls.tower.TowerResolver.runResolve(TowerResolver.kt:76)
	at org.jetbrains.kotlin.resolve.calls.tower.NewResolutionOldInference.runResolution(NewResolutionOldInference.kt:174)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.doResolveCall(CallResolver.java:609)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.doResolveCallOrGetCachedResults(CallResolver.java:519)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.lambda$computeTasksAndResolveCall$0(CallResolver.java:185)
	at org.jetbrains.kotlin.util.PerformanceCounter.time(PerformanceCounter.kt:90)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.computeTasksAndResolveCall(CallResolver.java:183)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.computeTasksAndResolveCall(CallResolver.java:173)
	at org.jetbrains.kotlin.resolve.calls.CallResolver.resolveFunctionCall(CallResolver.java:276)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getResolvedCallForFunction(CallExpressionResolver.kt:91)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getCallExpressionTypeInfoWithoutFinalTypeCheck(CallExpressionResolver.kt:197)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getUnsafeSelectorTypeInfo(CallExpressionResolver.kt:306)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getSafeOrUnsafeSelectorTypeInfo(CallExpressionResolver.kt:336)
	at org.jetbrains.kotlin.resolve.calls.CallExpressionResolver.getQualifiedExpressionTypeInfo(CallExpressionResolver.kt:425)
	at org.jetbrains.kotlin.types.expressions.BasicExpressionTypingVisitor.visitQualifiedExpression(BasicExpressionTypingVisitor.java:776)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.visitQualifiedExpression(ExpressionTypingVisitorDispatcher.java:380)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher$ForDeclarations.visitQualifiedExpression(ExpressionTypingVisitorDispatcher.java:54)
	at org.jetbrains.kotlin.psi.KtVisitor.visitDotQualifiedExpression(KtVisitor.java:298)
	at org.jetbrains.kotlin.psi.KtDotQualifiedExpression.accept(KtDotQualifiedExpression.kt:31)
	at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.lambda$getTypeInfo$0(ExpressionTypingVisitorDispatcher.java:182)
	... 63 more```

Question: GC or MM?

Will Kotlin native be garbage collected or managed manually like C, Rust, etc?

Performance

I noticed that there was a previously closed issue that brought up performance concerns. I believe the issue was closed due to lack of info/fair comparison.

I realize Kotnlin Native is still very new and it's something that I am very excited for. However, I have noticed some performance issues when compared to C and even Java. For benchmarking I wrote a 1-level Karatsuba multiplication to multiply two 576 bit numbers and the average computation time using Kotlin Native is significantly higher than C and Kotlin Java.

C avg runtime: 0.006630 milliseconds
Kotlin Java avg runtime: 0.01605 milliseconds
Kotlin Native avg runtime: 0.55328 milliseconds

This is 83 times slower than C and 34 times slower than Kotlin Java.

Is performance still being worked on?

Specs:
Windows 10
Intel i5-4690K
16GB RAM

Kotlin Code (Used for both Kotlin Native and Kotlin Java builds):

import time.*

fun main(arg : Array<String>) {
    val karatsuba : Karatsuba = Karatsuba(1);

    var avgTime : Long = 0;
    val iterations : Int = 100000;

    val  a : Array<Long> = arrayOf<Long>(0x7d8d, 0x54ca, 0x1866, 0x3399, 0x26d1, 0x2d0d, 0xcaf9, 0xf169, 0xbbce, 0xd1a8, 0xd51f, 0x4ecd,
            0xd035, 0xd7f8, 0x1cbb, 0xc278, 0xe6dc, 0xbeb3, 0xaa99, 0x3b75, 0xee36, 0x3629, 0x7787, 0xd4e0, 0x5882, 0x6965, 0x733b, 0x4ed5, 0x6c08,
            0x70f3, 0x5614, 0x83dc, 0x016b, 0, 0, 0);
    val b : Array<Long> = arrayOf<Long>(0x577d, 0x11fd, 0x7740, 0xfa10, 0xc40e, 0x54cb, 0xbb90, 0xb69f, 0xb805, 0x0214, 0x211e, 0x666e, 0x5ccc, 0x5be4, 0xd1be, 0x0344,
            0x3e08, 0xb277, 0x3c8a, 0x1d5a, 0x6df7, 0x95a5, 0xb110, 0xe0ae, 0x1e01, 0x2420, 0x0b9d, 0x8f3a, 0x7cae, 0x9d93, 0x616f, 0x8e71, 0x01b7, 0, 0, 0)

    for (i in 0 until iterations) {
        //avgTime += measureTimeMillis {
        avgTime += measureClock {
            val result: Array<Long> = karatsuba.compute(a, b)
        }
    }

    print("Avg Time = " + (avgTime / iterations.toFloat()).toString() + "ms")
}

fun measureClock(func : () -> Unit) : Int {
    val start : Int = clock();

    func()

    return (clock() - start)
}
class Karatsuba(level : Int) {
    private val mLevel : Int = level;

    public fun compute(a : Array<Long>, b : Array<Long>) : Array<Long> {
        val halfSize : Int = a.size / 2;

        val r : Array<Long> = Array<Long>(a.size + b.size, {0});

        val z0 : Array<Long> = productScan(a.sliceArray(0 until halfSize), b.sliceArray(0 until halfSize))

        val z2 : Array<Long> = productScan(a.sliceArray(halfSize until a.size), b.sliceArray(halfSize until b.size))

        val mid : Pair<Array<Long>, Array<Long>> = Pair(Array<Long>(halfSize, {0}), Array<Long>(halfSize, {0}))
        for (i in mid.first.indices) {
            mid.first[i] = a[i] + a[halfSize + i]
            mid.second[i] = b[i] + b[halfSize + i]
        }

        val z1 : Array<Long> = productScan(mid.first, mid.second)

        for (i in z1.indices) {
            z1[i] = z1[i] - z0[i] - z2[i];
        }

        for (i in a.indices) {
            r[i] += z0[i]
            r[halfSize + i] += z1[i]
            r[a.size + i] += z2[i]
        }

        return r
    }

    public fun productScan(scanA : Array<Long>, scanB : Array<Long>) : Array<Long> {
        val r : Array<Long> = Array<Long>(scanA.size + scanB.size, {0});

        for (i in 0 until scanA.size) {
            for (j in 0 until scanB.size) {
                r[i + j] += scanA[i] * scanB[j];
            }
        }

        return r;
    }
}

cinterop tool path problem when creating klib

When I try to create a klib from a sfml.def file I get the error below. It looks like clang is working from a different path or something because the file mentioned does exists.

Error:

rnentjes@rnentjes-VPCF13S0E:~/Development/konan/konan-game$ ../kotlin-native/dist/bin/cinterop -def def/sfml.def -o sfml
/home/rnentjes/Development/konan/kotlin-native/dist/dependencies/clang-llvm-3.9.0-linux-x86-64/bin/clang -I/usr/include -isystem /home/rnentjes/Development/konan/kotlin-native/dist/dependencies/clang-llvm-3.9.0-linux-x86-64/lib/clang/3.9.0/include --gcc-toolchain=/home/rnentjes/Development/konan/kotlin-native/dist/dependencies/target-gcc-toolchain-3-linux-x86-64 -L/home/rnentjes/Development/konan/kotlin-native/dist/dependencies/clang-llvm-3.9.0-linux-x86-64/lib -B/home/rnentjes/Development/konan/kotlin-native/dist/dependencies/target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot/../bin --sysroot=/home/rnentjes/Development/konan/kotlin-native/dist/dependencies/target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot -emit-llvm -c sfml-build/natives/cstubs.c -o sfml-build/natives/cstubs.bc
clang-3.9: error: no such file or directory: 'sfml-build/natives/cstubs.c'
clang-3.9: error: no input files
Exception in thread "main" java.lang.Error: Process finished with non-zero exit code: 1
        at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.runExpectingSuccess(main.kt:106)
        at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.runCmd(main.kt:152)
        at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processLib(main.kt:382)
        at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.main(main.kt:37)

sfml.def:

# SFML/Audio.h SFML/Config.h SFML/Graphics.h SFML/Network.h SFML/OpenGL.h SFML/System.h SFML/Window.h
headers = SFML/Audio.h SFML/Config.h SFML/Graphics.h SFML/Network.h SFML/System.h SFML/Window.h
compilerOpts =
excludedFunctions =
compilerOpts.linux = -I/usr/include

The sfml-build contains the following files after the error:

sfml-build/kotlin/sfml/sfml.kt
sfml-build/natives/cstubs.c

Feature request: Kotlin declaration file for header/lib

Like TypeScript declaration-files for js lib, with these declaration, typescript is easy to work with vanilla js.

TypeScript with JavaScript like KN with vanilla C, KN will stub for headers, why not standardize these stubs, like

<dependency>
    <groupId>org.jetbrains.kotlin.stubs</groupId>
    <artifactId>glibc</artifactId>
    <version>2.25.0</version>
</dependency>

for glibc v2.25, if someone need glibc, just include this, then done, everything just works.In this dependency, just some declarations, like interface or method declarations. With theses, DRY is achieved, maybe with better doc, we can work with kn way more easier and share what we have done.

If kn can do this, then maybe a doxgen doc to kn declarations will build up, boom, a lot of very good qualified libs just works in kn.So, why should I use c/c++ if I can use typed and featured kotlin-native.

Dependency generation scripts

Hi -- Are the scripts that generate the binary tarballs for the downloaded dependencies stored in ~/.konan/cache (e.g. the macos/ios sysroots, clang+llvm, etc) available either in this repo, another repo, or perhaps as a gist?
I am in particular curious how you are building the sysroots....

This is a great project by the way. best, nehal

Executables Generated By Konan Aren't Statically Linked

Every Linux/ARM executable generated by konanc is dynamically linked. Shouldn't the executables be statically linked?

Ran the following command on a generated executable, file TetrisRaspberry.kexe. Below is the output:

TetrisRaspberry.kexe: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=f7f67296e36d83a6660722c60f1c86eceb2ee3c8, not stripped

Star projection causes compiler stack overflow

I have a recursive generic type interface Matrix<T, MatType: Matrix<T, MatType>> which I'm doing star projections on. This works on js and jvm targets, but on native I get a stack overflow during compilation:

exception: java.lang.StackOverflowError
        at org.jetbrains.kotlin.types.StarProjectionImpl.<init>(StarProjectionImpl.kt:32)
        at org.jetbrains.kotlin.types.TypeUtils.makeStarProjection(TypeUtils.java:405)
        at org.jetbrains.kotlin.types.StarProjectionImplKt$starProjectionType$1.get(StarProjectionImpl.kt:46)
        at org.jetbrains.kotlin.types.TypeConstructorSubstitution.get(TypeSubstitution.kt:47)
        at org.jetbrains.kotlin.types.TypeSubstitutor.unsafeSubstitute(TypeSubstitutor.java:140)
        at org.jetbrains.kotlin.types.TypeSubstitutor.substituteTypeArguments(TypeSubstitutor.java:258)
        at org.jetbrains.kotlin.types.TypeSubstitutor.substituteCompoundType(TypeSubstitutor.java:238)
        at org.jetbrains.kotlin.types.TypeSubstitutor.unsafeSubstitute(TypeSubstitutor.java:206)
        at org.jetbrains.kotlin.types.TypeSubstitutor.substituteWithoutApproximation(TypeSubstitutor.java:122)
        at org.jetbrains.kotlin.types.TypeSubstitutor.substitute(TypeSubstitutor.java:107)
        at org.jetbrains.kotlin.types.TypeSubstitutor.substitute(TypeSubstitutor.java:101)
        at org.jetbrains.kotlin.types.StarProjectionImplKt.starProjectionType(StarProjectionImpl.kt:50)
        at org.jetbrains.kotlin.types.StarProjectionImpl$_type$2.invoke(StarProjectionImpl.kt:33)
        at org.jetbrains.kotlin.types.StarProjectionImpl$_type$2.invoke(StarProjectionImpl.kt:24)
        at kotlin.SafePublicationLazyImpl.getValue(Lazy.kt:188)
        at org.jetbrains.kotlin.types.StarProjectionImpl.get_type(StarProjectionImpl.kt)
        at org.jetbrains.kotlin.types.StarProjectionImpl.getType(StarProjectionImpl.kt:36)
        at org.jetbrains.kotlin.backend.konan.llvm.BinaryInterfaceKt.acyclicTypeMangler(BinaryInterface.kt:115)
        at org.jetbrains.kotlin.backend.konan.llvm.BinaryInterfaceKt.acyclicTypeMangler(BinaryInterface.kt:115)
        at org.jetbrains.kotlin.backend.konan.llvm.BinaryInterfaceKt.acyclicTypeMangler(BinaryInterface.kt:115)
        at org.jetbrains.kotlin.backend.konan.llvm.BinaryInterfaceKt.acyclicTypeMangler(BinaryInterface.kt:115)
        at org.jetbrains.kotlin.backend.konan.llvm.BinaryInterfaceKt.acyclicTypeMangler(BinaryInterface.kt:115)
        at org.jetbrains.kotlin.backend.konan.llvm.BinaryInterfaceKt.acyclicTypeMangler(BinaryInterface.kt:115)
        at org.jetbrains.kotlin.backend.konan.llvm.BinaryInterfaceKt.acyclicTypeMangler(BinaryInterface.kt:115)
        at org.jetbrains.kotlin.backend.konan.llvm.BinaryInterfaceKt.acyclicTypeMangler(BinaryInterface.kt:115)
(...many more)

I don't have a boiled down test case to reproduce, but heres the workaround commit I needed in order to get native compiling. In general I had to remove any star projections on Matrix and replace them with explicit type parameters.

llc: xxxx.bc: error: Invalid value

Hi,

Trying to pass the generated bitcode file to llc, I keep getting "Invalid Value" error. Am I missing something?
I am using LLVM version 3.4 and latest Kotlin/Native version.

Regards,
Aydin

GTK example and pkg-config

Should the GTK example Gradle build and shell script use pkg-config to find the requires includes and libraries rather than hardwire them?

Freestanding environment

I love Kotlin Native so far.

I would very much like to write a sample OS kernel project in it, but this requires the equivalent of --freestanding. It also means being able to shut off automatic mem mgmt.

Any plans for this?

kotlinc lists iphone_sim target, but can't download dependencies.

I know https://github.com/JetBrains/kotlin-native/blob/master/RELEASE_NOTES.md#supported-platforms doesn't list the iPhone simulator, but it is listed when running:

kotlinc -list_targets

Output as follows:

iphone:                                 
iphone_sim:                             
macbook:                      (default) 

When I enter the command:

kotlinc -output hello -target iphone_sim hello.kt

I see the following output:

Downloading native dependencies (LLVM, sysroot etc). This is a one-time action performed only on the first run of the compiler.

Download dependency: http://download.jetbrains.com/kotlin/native/libffi-3.2.1-2-darwin-ios-sim.tar.gz (0 bytes/-). Done.
Exception in thread "main" java.lang.IllegalStateException: Cannot download dependencies.
	at org.jetbrains.kotlin.cli.bc.K2NativeKt.maybeExecuteHelper(K2Native.kt:47)
	at org.jetbrains.kotlin.cli.bc.K2NativeKt.access$maybeExecuteHelper(K2Native.kt:1)
	at org.jetbrains.kotlin.cli.bc.K2Native.setupPlatformSpecificArgumentsAndServices(K2Native.kt:147)
	at org.jetbrains.kotlin.cli.bc.K2Native.setupPlatformSpecificArgumentsAndServices(K2Native.kt:51)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:166)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:137)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:64)
	at org.jetbrains.kotlin.cli.common.CLICompiler.doMainNoExit(CLICompiler.java:403)
	at org.jetbrains.kotlin.cli.common.CLICompiler.doMain(CLICompiler.java:387)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:157)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:154)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profileIf(util.kt:33)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profile(util.kt:28)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion.main(K2Native.kt:156)
	at org.jetbrains.kotlin.cli.bc.K2NativeKt.main(K2Native.kt:162)
Caused by: java.lang.RuntimeException: Cannot download dependency: http://download.jetbrains.com/kotlin/native/libffi-3.2.1-2-darwin-ios-sim.tar.gz
	at org.jetbrains.kotlin.konan.DependencyDownloader.download(DependencyDownloader.kt:152)
	at org.jetbrains.kotlin.konan.DependencyDownloader.processDependency(DependencyDownloader.kt:80)
	at org.jetbrains.kotlin.konan.DependencyDownloader.run(DependencyDownloader.kt:164)
	at org.jetbrains.kotlin.konan.Helper0.run(Helper0.kt:31)
	at org.jetbrains.kotlin.cli.bc.K2NativeKt.maybeExecuteHelper(K2Native.kt:43)
	... 14 more
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://download-cf.jetbrains.com/kotlin/native/libffi-3.2.1-2-darwin-ios-sim.tar.gz
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
	at java.net.URL.openStream(URL.java:1045)
	at org.jetbrains.kotlin.konan.DependencyDownloader$download$1.invoke(DependencyDownloader.kt:127)
	at org.jetbrains.kotlin.konan.DependencyDownloader$download$1.invoke(DependencyDownloader.kt:27)
	at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:18)

iOS Installation instructions

I'm trying to install the sample tetris on my iPhone but I am stuck. the instructions state "take Info.plist, then use XCode and your own private signing identity"

I'd appreciate any further guidance on how this is done. Do I create a new xcode project? Is this done via the command line?

konanc fails to execute when $KONAN_HOME contains spaces

If path to KONAN_HOME contains spaces, konanc will fail with:

Error: Could not find or load main class Source.Kotlin.dist

Moving KONAN_HOME directory to a path without spaces makes everything work again.

Platform: macOS 10.12.6 Beta (16G8c)
Shell: zsh

Running kotlinc without arguments

It seems to complete successfully without doing anything. Other compilers when launched without arguments could expect to get source code from stdin, while kotlinc seems just to do nothing. I would find more natural to get an error and a non-zero exit value

GTK sample uses C API directly, use GIR files to create Kotlin binding instead

It appears that the GTK example is just using the C API directly . This is very not Kotlin. RAII is very difficult in C and it all gets very awkward for people not having C tunnel vision. gtkmm is a binding to GTK for C++, GtkD is a binding for D. both of these provide an adaptor layer which is very lightweight to allow people to construct GTK application but using idiomatic code. D uses the GIR files of GTK (and GStreamer) to create a very idiomatic D way of using GTK.

I propose that a Kotlin binding is created to GTK and GStreamer by using the GIR files just as GtkD does.

Support musl

Pleas optional support musl to reduce exe file size.

cinterop fails on windows.h

headers = windows.h
compilerOpts = -DUNICODE

call cinterop -def windows.def -target mingw -o windows

result:

F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64/bin/clang -DUNICODE -target x86_64-w64-mingw32 -isystem F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64/lib/clang/3.9.1/include --sysroot=F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64 -BF:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64/bin -emit-llvm -c F:\src\kotlin-win\windows-build\natives\cstubs.c -o F:\src\kotlin-win\windows-build\natives\cstubs.bc
F:\src\kotlin-win\windows-build\natives\cstubs.c:1915:5: warning: '_beep' is deprecated [-Wdeprecated-declarations]
    _beep((unsigned int)_Frequency, (unsigned int)_Duration);
    ^
F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64\x86_64-w64-mingw32\include\stdlib.h:610:24: note: '_beep' has been explicitly marked deprecated here
  _CRTIMP void __cdecl _beep(unsigned _Frequency,unsigned _Duration) __MINGW_ATTRIB_DEPRECATED;
                       ^
F:\src\kotlin-win\windows-build\natives\cstubs.c:1919:5: warning: '_seterrormode' is deprecated [-Wdeprecated-declarations]
    _seterrormode((int)_Mode);
    ^
F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64\x86_64-w64-mingw32\include\stdlib.h:612:24: note: '_seterrormode' has been explicitly marked deprecated here
  _CRTIMP void __cdecl _seterrormode(int _Mode) __MINGW_ATTRIB_DEPRECATED;
                       ^
F:\src\kotlin-win\windows-build\natives\cstubs.c:1923:5: warning: '_sleep' is deprecated [-Wdeprecated-declarations]
    _sleep((unsigned long)_Duration);
    ^
F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64\x86_64-w64-mingw32\include\stdlib.h:613:24: note: '_sleep' has been explicitly marked deprecated here
  _CRTIMP void __cdecl _sleep(unsigned long _Duration) __MINGW_ATTRIB_DEPRECATED;
                       ^
F:\src\kotlin-win\windows-build\natives\cstubs.c:2220:21: error: always_inline function '_cvtsh_ss' requires target feature 'sse4.1', but would be inlined into function 'windows_kni__cvtsh_ss' that is compiled without support for 'sse4.1'
    return (float) (_cvtsh_ss((unsigned short)__a));
                    ^
F:\src\kotlin-win\windows-build\natives\cstubs.c:14398:207: warning: passing 'void **' to parameter of type 'const void **' discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
    return (int32_t) (CertAddSerializedElementToStore((HCERTSTORE)hCertStore, (BYTE*)pbElement, (DWORD)cbElement, (DWORD)dwAddDisposition, (DWORD)dwFlags, (DWORD)dwContextTypeFlags, (DWORD*)pdwContextType, (void**)ppvContext));
                                                                                                                                                                                                              ^~~~~~~~~~~~~~~~~~
F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64\x86_64-w64-mingw32\include\wincrypt.h:3918:223: note: passing argument to parameter 'ppvContext' here
  WINIMPM WINBOOL WINAPI CertAddSerializedElementToStore (HCERTSTORE hCertStore, const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags, DWORD dwContextTypeFlags, DWORD *pdwContextType, const void **ppvContext);
                                                                                                                                                                                                                              ^
F:\src\kotlin-win\windows-build\natives\cstubs.c:14754:126: warning: passing 'BYTE **' (aka 'unsigned char **') to parameter of type 'const BYTE **' (aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
    return (int32_t) (CryptSignMessage((PCRYPT_SIGN_MESSAGE_PARA)pSignPara, (WINBOOL)fDetachedSignature, (DWORD)cToBeSigned, (BYTE**)rgpbToBeSigned, (DWORD*)rgcbToBeSigned, (BYTE*)pbSignedBlob, (DWORD*)pcbSignedBlob));
                                                                                                                             ^~~~~~~~~~~~~~~~~~~~~~
F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64\x86_64-w64-mingw32\include\wincrypt.h:4421:139: note: passing argument to parameter 'rgpbToBeSigned' here
  WINIMPM WINBOOL WINAPI CryptSignMessage (PCRYPT_SIGN_MESSAGE_PARA pSignPara, WINBOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
                                                                                                                                          ^
F:\src\kotlin-win\windows-build\natives\cstubs.c:14770:196: warning: passing 'BYTE **' (aka 'unsigned char **') to parameter of type 'const BYTE **' (aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
    return (int32_t) (CryptVerifyDetachedMessageSignature((PCRYPT_VERIFY_MESSAGE_PARA)pVerifyPara, (DWORD)dwSignerIndex, (BYTE*)pbDetachedSignBlob, (DWORD)cbDetachedSignBlob, (DWORD)cToBeSigned, (BYTE**)rgpbToBeSigned, (DWORD*)rgcbToBeSigned, (PCCERT_CONTEXT*)ppSignerCert));
                                                                                                                                                                                                   ^~~~~~~~~~~~~~~~~~~~~~
F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64\x86_64-w64-mingw32\include\wincrypt.h:4425:213: note: passing argument to parameter 'rgpbToBeSigned' here
  WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageSignature (PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], PCCERT_CONTEXT *ppSignerCert);
                                                                                                                                                                                                                    ^
F:\src\kotlin-win\windows-build\natives\cstubs.c:14794:121: warning: passing 'BYTE **' (aka 'unsigned char **') to parameter of type 'const BYTE **' (aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
    return (int32_t) (CryptHashMessage((PCRYPT_HASH_MESSAGE_PARA)pHashPara, (WINBOOL)fDetachedHash, (DWORD)cToBeHashed, (BYTE**)rgpbToBeHashed, (DWORD*)rgcbToBeHashed, (BYTE*)pbHashedBlob, (DWORD*)pcbHashedBlob, (BYTE*)pbComputedHash, (DWORD*)pcbComputedHash));
                                                                                                                        ^~~~~~~~~~~~~~~~~~~~~~
F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64\x86_64-w64-mingw32\include\wincrypt.h:4431:134: note: passing argument to parameter 'rgpbToBeHashed' here
  WINIMPM WINBOOL WINAPI CryptHashMessage (PCRYPT_HASH_MESSAGE_PARA pHashPara, WINBOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob, BYTE *pbComputedHash, DWORD *pcbComputedHash);
                                                                                                                                     ^
F:\src\kotlin-win\windows-build\natives\cstubs.c:14802:165: warning: passing 'BYTE **' (aka 'unsigned char **') to parameter of type 'const BYTE **' (aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
    return (int32_t) (CryptVerifyDetachedMessageHash((PCRYPT_HASH_MESSAGE_PARA)pHashPara, (BYTE*)pbDetachedHashBlob, (DWORD)cbDetachedHashBlob, (DWORD)cToBeHashed, (BYTE**)rgpbToBeHashed, (DWORD*)rgcbToBeHashed, (BYTE*)pbComputedHash, (DWORD*)pcbComputedHash));
                                                                                                                                                                    ^~~~~~~~~~~~~~~~~~~~~~
F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64\x86_64-w64-mingw32\include\wincrypt.h:4433:177: note: passing argument to parameter 'rgpbToBeHashed' here
  WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageHash (PCRYPT_HASH_MESSAGE_PARA pHashPara, BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash, DWORD *pcbComputedHash);
                                                                                                                                                                                ^
F:\src\kotlin-win\windows-build\natives\cstubs.c:14834:290: warning: passing 'void **' to parameter of type 'const void **' discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
    return (int32_t) (CryptQueryObject((DWORD)dwObjectType, (void*)pvObject, (DWORD)dwExpectedContentTypeFlags, (DWORD)dwExpectedFormatTypeFlags, (DWORD)dwFlags, (DWORD*)pdwMsgAndCertEncodingType, (DWORD*)pdwContentType, (DWORD*)pdwFormatType, (HCERTSTORE*)phCertStore, (HCRYPTMSG*)phMsg, (void**)ppvContext));
                                                                                                                                                                                                                                                                                                 ^~~~~~~~~~~~~~~~~~
F:\src\KOEF6F~1\dist\bin\../dependencies/msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-windows-x86-64\x86_64-w64-mingw32\include\wincrypt.h:4441:303: note: passing argument to parameter 'ppvContext' here
  WINIMPM WINBOOL WINAPI CryptQueryObject (DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD dwFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, DWORD *pdwFormatType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg, const void **ppvContext);
                                                                                                                                                                                                                                                                                                              ^
9 warnings and 1 error generated.
Exception in thread "main" java.lang.Error: Process finished with non-zero exit code: 1
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.runExpectingSuccess(main.kt:119)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.runCmd(main.kt:175)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processLib(main.kt:438)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.main(main.kt:34)

Lambda with a default value in the constructor of a data class causes crash

EDIT: The hanging issue described here is fixed, but other issues started happening
EDIT 2: I commented details on the lambda issues
EDIT 3: One of the lambda issues is unrelated to Kotlin/Native and is reported @ KT-18137
EDIT 4: Second issue is related to the IR subsystem and is reported @ KT-18208

I am compiling a project (https://github.com/AdrianVovk/kotlin-native-sdk) with Gradle. I was having issues with the compiler that don't make sense (extension lambda with one parameter wanting two parameters, but when I put in both it only wants one, the same extension lambda returning T (non null), but the compiler says that it is detecting Any? instead of Any) so I pulled in master for Kotlin/Native. Now, the compiler started spitting out errors (Cant find a klib file for my gtk interop) so I cleaned out the project and reran the build. Now, the compiler hangs here:

$ gradle sample:run
Starting a Gradle Daemon (subsequent builds will be faster)
:sample:downloadKonanCompiler
:sample:genGtkInteropStubs UP-TO-DATE
:sample:compileGtkInteropStubs
KtFile: gtk.kt
> Building 18% > :sample:compileGtkInteropStubs

It never moves on. If I look at system monitor, it hits all CPU cores at once (the fan spins up) and the ram usage is steadily climbing up to about 2 to 2.2 gigabytes. Once it hits somewhere in between there (which usually takes a few seconds), the fan spins back down, RAM use starts falling back down (incredibly slowly), and so does CPU usage. Now instead of using all cores, the program now pins one core to 100% as the rest run anywhere from 1-3. From time to time it switches cores and starts using another one (It is using CPU4, but then it switches to CPU3, then to 6, etc).

Include name of program in main

The first object of argv is left out. This is a problem because it is nice to have a way to get the name of the file being executed.

Example

fun main(execname: String, args: Array<String>) {
   if (!checkargs(args)) {
      println("Usage: $execname [OPTIONS] - Test program")
      println("   --help: Display help message")
      println("   --somearg: This does something")
      println("   --version: Print out the version")
      exit(1)
   }

   // Program
}

Compiled as Program.kexe

user@hostname:~/dir/$ ./Program.kexe --badvar
Usage: Program.kexe [OPTIONS] - Test Program
   --help: Display help message
   --somearg: This does something
   --version: Print out the version

Then renamed to program

user@hostname:~/dir/$ ./program --badvar
Usage: program [OPTIONS] - Test Program
   --help: Display help message
   --somearg: This does something
   --version: Print out the version

Gradle Plugin recompiles libraries

The Gradle plugin will recompile libraries when it is unnecessary.

For example, I have it build GTK. Whenever I do gradle build it recompiles the stubs for GTK. Each time

Failure to build per the instructions

I cloned the repo, here is the last commit from the version I cloned:

commit 7c1c07a0d9b4eeecc0bd1fa9f825c664e19ff48e
Author: Vasily Levchenko <[email protected]>
Date:   Sun Apr 30 08:54:50 2017 +0300

    handline: license and LICENSE on mac with case-insensitive file system.
    
    - license->licenses
    - reintroduce 4383b5de

The following exception was thrown when I attempted to update dependencies:

⋊> /p/t/kotlin-native on master ◦ ./gradlew dependencies:update --stacktrace                                                                                                           09:55:04

FAILURE: Build failed with an exception.

* What went wrong:
java.lang.ExceptionInInitializerError (no error message)

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
java.lang.ExceptionInInitializerError
        at org.gradle.initialization.DefaultClassLoaderRegistry.restrictToGradleApi(DefaultClassLoaderRegistry.java:48)
        at org.gradle.initialization.DefaultClassLoaderRegistry.<init>(DefaultClassLoaderRegistry.java:31)
        at org.gradle.internal.service.scopes.GlobalScopeServices.createClassLoaderRegistry(GlobalScopeServices.java:208)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:547)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
        at org.gradle.internal.service.DefaultServiceRegistry.invoke(DefaultServiceRegistry.java:462)
        at org.gradle.internal.service.DefaultServiceRegistry.access$1200(DefaultServiceRegistry.java:84)
        at org.gradle.internal.service.DefaultServiceRegistry$FactoryMethodService.invokeMethod(DefaultServiceRegistry.java:796)
        at org.gradle.internal.service.DefaultServiceRegistry$FactoryService.create(DefaultServiceRegistry.java:752)
        at org.gradle.internal.service.DefaultServiceRegistry$ManagedObjectProvider.getInstance(DefaultServiceRegistry.java:589)
        at org.gradle.internal.service.DefaultServiceRegistry$SingletonService.get(DefaultServiceRegistry.java:634)
        at org.gradle.internal.service.DefaultServiceRegistry.applyConfigureMethod(DefaultServiceRegistry.java:253)
        at org.gradle.internal.service.DefaultServiceRegistry.findProviderMethods(DefaultServiceRegistry.java:214)
        at org.gradle.internal.service.DefaultServiceRegistry.addProvider(DefaultServiceRegistry.java:352)
        at org.gradle.internal.service.ServiceRegistryBuilder.build(ServiceRegistryBuilder.java:52)
        at org.gradle.launcher.cli.BuildActionsFactory.createGlobalClientServices(BuildActionsFactory.java:148)
        at org.gradle.launcher.cli.BuildActionsFactory.runBuildWithDaemon(BuildActionsFactory.java:108)
        at org.gradle.launcher.cli.BuildActionsFactory.createAction(BuildActionsFactory.java:83)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.createAction(CommandLineActionFactory.java:249)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:239)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:217)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:33)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:210)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:174)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:547)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:547)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:31)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:108)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected java.lang.Package[] java.lang.ClassLoader.getPackages() accessible: module java.base does not "opens java.lang" to unnamed module @4dd6fd0a
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:335)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:278)
        at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:196)
        at java.base/java.lang.reflect.Method.setAccessible(Method.java:190)
        at org.gradle.internal.reflect.JavaMethod.<init>(JavaMethod.java:34)
        at org.gradle.internal.reflect.JavaMethod.<init>(JavaMethod.java:38)
        at org.gradle.internal.reflect.JavaReflectionUtil.method(JavaReflectionUtil.java:224)
        at org.gradle.internal.classloader.FilteringClassLoader.<clinit>(FilteringClassLoader.java:48)
        ... 46 more

I'm using the Java 1.9 EA release:

⋊> /p/t/kotlin-native on master ◦ java -version                                                                                                                                        09:55:07
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+161)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+161, mixed mode)

Undefined reference to 'kfun:main(kotlin.Array<kotlin.String>)'

#  ./gradlew dependencies:update
#  ./gradlew -Pshims=true dist 
#  cat Hello.kt

package hello

fun getHelloString() : String {
    return "Hello, world!"
}

fun main(args : Array<String>) {
    println(getHelloString())
}


#  kotlinc Hello.kt -o hello

/tmp/combined777855394143824836.o:ld-temp.o:function Konan_start: error: undefined reference to 'kfun:main(kotlin.Array<kotlin.String>)'
exception: java.lang.IllegalStateException: The /home/jiamo/develop/kotlin-native/dist/dependencies/target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/bin/ld.gold command returned non-zero exit code: 1.
	at org.jetbrains.kotlin.backend.konan.LinkStage.runTool(LinkStage.kt:268)
	at org.jetbrains.kotlin.backend.konan.LinkStage.link(LinkStage.kt:239)
	at org.jetbrains.kotlin.backend.konan.LinkStage$linkStage$3.invoke(LinkStage.kt:290)
	at org.jetbrains.kotlin.backend.konan.LinkStage$linkStage$3.invoke(LinkStage.kt:162)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:125)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:104)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profileIf(util.kt:33)
	at org.jetbrains.kotlin.backend.konan.PhaseManager.phase$backend_native_compiler(KonanPhases.kt:124)
	at org.jetbrains.kotlin.backend.konan.LinkStage.linkStage(LinkStage.kt:289)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$5.invoke(KonanDriver.kt:122)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$5.invoke(KonanDriver.kt)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:125)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:104)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profileIf(util.kt:33)
	at org.jetbrains.kotlin.backend.konan.PhaseManager.phase$backend_native_compiler(KonanPhases.kt:124)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt.runTopLevelPhases(KonanDriver.kt:121)
	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:68)
	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:55)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:182)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:130)
	at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:52)
	at org.jetbrains.kotlin.cli.common.CLICompiler.doMainNoExit(CLICompiler.java:383)
	at org.jetbrains.kotlin.cli.common.CLICompiler.doMain(CLICompiler.java:373)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:168)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:165)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profileIf(util.kt:33)
	at org.jetbrains.kotlin.backend.konan.util.UtilKt.profile(util.kt:28)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion.main(K2Native.kt:167)
	at org.jetbrains.kotlin.cli.bc.K2NativeKt.main(K2Native.kt:173)

Tizen support

Hi,

Can we develop with Kotlin Native to Tizen platform?

Best regards,
Gabor

How to Generate IR (.ll) files?

Hi,

Is there any way we can generate IR files (a .ll file) like the way we do it with clang and its emit-llvm option? For example I can generate an IR file, test.ll, from my test.c using following command:

clang -S -emit-llvm test.c

Regards,
Aydin

Unable to download the compiler

I am using the konan plugin (version 0.3) on Mac and I get an error:

16:40:07.001 [INFO] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Executing task ':downloadKonanCompiler' (up-to-date check took 0.0 secs) due to:
  Task has not declared any outputs.
16:40:07.001 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':downloadKonanCompiler'.
16:40:07.001 [INFO] [org.gradle.api.Task] Downloading Kotlin Native compiler from http://download.jetbrains.com/kotlin/native/kotlin-native-macos-0.3 into /Users/federico/.konan
16:40:07.002 [DEBUG] [org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter] Removed task artifact state for {} from context.
16:40:07.002 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':downloadKonanCompiler'
16:40:07.002 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger] :downloadKonanCompiler FAILED
16:40:07.002 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :downloadKonanCompiler (Thread[Daemon worker Thread 4,5,main]) completed. Took 0.001 secs.
16:40:07.002 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationWorkerRegistry] Worker root.1 completed (0 in use)
16:40:07.002 [DEBUG] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] Task worker [Thread[Daemon worker Thread 4,5,main]] finished, busy: 0.001 secs, idle: 0.001 secs
16:40:07.003 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
16:40:07.003 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.
16:40:07.003 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
16:40:07.003 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:
16:40:07.003 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Cannot download Kotlin Native compiler
16:40:07.003 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > java.nio.channels.OverlappingFileLockException (no error message)
16:40:07.003 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
16:40:07.003 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Try:
16:40:07.003 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Run with --stacktrace option to get the stack trace.
16:40:07.003 [LIFECYCLE] [org.gradle.internal.buildevents.BuildResultLogger]
16:40:07.003 [LIFECYCLE] [org.gradle.internal.buildevents.BuildResultLogger] BUILD FAILED
16:40:07.004 [LIFECYCLE] [org.gradle.internal.buildevents.BuildResultLogger]
16:40:07.004 [LIFECYCLE] [org.gradle.internal.buildevents.BuildResultLogger] Total time: 0.784 secs

It seems to try to download http://download.jetbrains.com/kotlin/native/kotlin-native-macos-0.3. I tried to download it in a browser and saw this:
screen shot 2017-06-19 at 16 42 59

interop with package name failed

Hi, I tried konan with a interop config like this:

konanInterop {
    kotliner {
        defFile 'kotliner.def'
        includeDirs "src/c"
        pkg "cn.kotliner"
    }
}

while generating the cstubs, error occurred:

12:40:42: Executing external task 'build'...
:downloadKonanCompiler
Exception in thread "main" java.lang.Error: Process finished with non-zero exit code: 1
:genKotlinerInteropStubs
/Users/benny/Github/kotlin-native/dist/dependencies/clang-llvm-3.9.0-darwin-macos/bin/clang -isystem /Users/benny/Github/kotlin-native/dist/dependencies/clang-llvm-3.9.0-darwin-macos/lib/clang/3.9.0/include -B/Users/benny/Github/kotlin-native/dist/dependencies/target-sysroot-1-darwin-macos/usr/bin --sysroot=/Users/benny/Github/kotlin-native/dist/dependencies/target-sysroot-1-darwin-macos -mmacosx-version-min=10.11 -Isrc/c -emit-llvm -c /Users/benny/workspace/Kotlin-Imooc/code/KonanGradleDemo/build/konan/nativelibs/genKotlinerInteropStubs/cnkotlinerstubs.c -o /Users/benny/workspace/Kotlin-Imooc/code/KonanGradleDemo/build/konan/nativelibs/genKotlinerInteropStubs/cnkotlinerstubs.bc
/Users/benny/workspace/Kotlin-Imooc/code/KonanGradleDemo/build/konan/nativelibs/genKotlinerInteropStubs/cnkotlinerstubs.c:4:15: error: expected ';' after top level declarator
int32_t kni_cn.kotliner_factorial (int32_t n) {
              ^
              ;
1 error generated.
	at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.runExpectingSuccess(main.kt:106)
	at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.runCmd(main.kt:152)
	at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processLib(main.kt:382)
	at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.main(main.kt:37)
:genKotlinerInteropStubs FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':genKotlinerInteropStubs'.
> Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 8.251 secs
Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
12:40:50: External task execution finished 'build'.

The referred file "cnkotlinerstubs.c":

#include <stdint.h>
#include <cn_kotliner.h>

int32_t kni_cn.kotliner_factorial (int32_t n) {
    return (int32_t) (factorial((int)n));
}

Maybe the generated cstubs name should avoid using the package name or just replace '.' with '_' as jni does.

Typealias resolution for parameters

I have a function:

fun someFunction(ptr: COpaquePointer?) {...}

And I have a variable:

//typealias gpointer = CPointer<out CPointed>
//typealias COpaquePointer = CPointer<out CPointed>
var data: gpointer?

I cannot call someFunction(data), because it throws something along the lines of:

Expecting COpaquePointer? /*CPointer<out CPointed>?*/ but found gpointer? /*CPointer<out CPointed>?*/

That is the premise of the issue. Once I have access to a computer I'll give you real code and the real output

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.