Files
kotlin-fork/kotlin-native/Interop
Ilya Matveev dc8186cb83 [K/N][Interop] Fix throwing exceptions through bridges in opt mode
By default, C functions compiled to bitcode by clang have the
nounwind attribute. If such functions throws an exception, the
behaviour is undefined.

Our interop machinery can process foreign exceptions on call sites
(terminate or wrap them in Kotlin exceptions). But if the interop
bridges have the nounwind attribute, LLVM optimizations (particularly
inlining) may lead to the situation when a foreign exception is ignored by
our foreign exception handler.

This patch fixes the issue by compiling bridges with -fexceptions flag.
This flag makes clang to not set the nounwind attribute, so exceptions
can be thrown through C frames.
2021-07-02 11:51:06 +00:00
..
2021-03-15 15:54:50 +03:00

Kotlin-native interop

Usage

Create file ../gradle.properties with contents:

llvmInstallPath=/path/to/llvm

Create a Gradle subproject somewhere under ../, using ../InteropExample as a template.

To generate the interop stubs and libraries and build all sources you can run the following command from ../:

./gradlew InteropExample:build

To run the example (if 'application' plugin is enabled):

./gradlew InteropExample:run