| // TARGET_BACKEND: NATIVE |
| // FILECHECK_STAGE: CStubs |
| |
| // MODULE: lib |
| // FILE: A.kt |
| class A { |
| |
| // CHECK-DEBUG: define ptr @"kfun:A#internalInlineMethod(kotlin.Any?){}kotlin.String" |
| // CHECK-DEBUG: call void @"kfun:A.object-1.<init>#internal" |
| internal inline fun internalInlineMethod(random: Any?) = object { |
| fun run() = "OK" |
| }.run() |
| |
| // CHECK: define ptr @"kfun:A#publicMethod(){}kotlin.String" |
| // CHECK: call void @"kfun:A.object-2.<init>#internal" |
| // CHECK: call void @"kfun:A.object-3.<init>#internal" |
| fun publicMethod() = internalInlineMethod(1) + internalInlineMethod(2) |
| } |
| |
| // MODULE: main()(lib) |
| // FILE: main.kt |
| |
| // CHECK: define ptr @"kfun:#box(){}kotlin.String" |
| fun box(): String { |
| // Test that the local class is not extracted and not reused in each inline function call site |
| // CHECK: call void @"kfun:object-1.<init>#internal" |
| A().internalInlineMethod(3).let { |
| if (it != "OK") return it |
| } |
| // CHECK: call void @"kfun:object-2.<init>#internal" |
| A().internalInlineMethod(4).let { |
| if (it != "OK") return it |
| } |
| |
| A().publicMethod().let { |
| if (it != "OKOK") return it |
| } |
| return "OK" |
| } |