| /* |
| * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. |
| * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. |
| */ |
| // TARGET_BACKEND: NATIVE |
| // WITH_PLATFORM_LIBS |
| // MODULE: cinterop |
| // FILE: kt51925.def |
| strictEnums = E |
| --- |
| enum E { |
| X = 1, Y = 2, Z = 42 |
| }; |
| |
| typedef struct { |
| int d; |
| } Struct; |
| |
| // MODULE: lib(cinterop) |
| // FILE: lib.kt |
| @file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class) |
| |
| import kt51925.* |
| import kotlinx.cinterop.* |
| |
| fun bar1(e: E) = e.value |
| |
| inline fun foo1() = bar1(E.Z) |
| |
| fun bar2(s: Struct): Int { |
| return s.d |
| } |
| |
| inline fun foo2(): Int { |
| memScoped { |
| val s = alloc<Struct>() |
| s.d = 42 |
| return bar2(s) |
| } |
| } |
| |
| // MODULE: main(lib) |
| // FILE: main.kt |
| import kotlin.test.* |
| |
| fun box(): String { |
| assertEquals(42u, foo1()) |
| assertEquals(42, foo2()) |
| return "OK" |
| } |