| // TARGET_BACKEND: NATIVE | |
| // FILECHECK_STAGE: CStubs | |
| // IGNORE_NATIVE: optimizationMode=OPT && cacheMode=STATIC_ONLY_DIST | |
| // IGNORE_NATIVE: optimizationMode=OPT && cacheMode=STATIC_EVERYWHERE | |
| // CHECK-LABEL: define i32 @"kfun:#wrapString(kotlin.String){}kotlin.Int | |
| // CHECK-OPT: call {{zeroext i16|i16}} @Kotlin_String_get | |
| // CHECK-DEBUG: call {{zeroext i16|i16}} @"kfun:kotlin.CharSequence#get(kotlin.Int){}kotlin.Char" | |
| // CHECK-LABEL: epilogue: | |
| fun wrapString(impl: String) = ifaceHandler(impl) | |
| // CHECK-LABEL: define i32 @"kfun:#wrapStringBuilder(kotlin.CharSequence){}kotlin.Int | |
| // CHECK-OPT: call {{zeroext i16|i16}} @"kfun:kotlin.text.StringBuilder#get(kotlin.Int){}kotlin.Char" | |
| // CHECK-DEBUG: call {{zeroext i16|i16}} @"kfun:kotlin.CharSequence#get(kotlin.Int){}kotlin.Char" | |
| // CHECK-LABEL: epilogue: | |
| fun wrapStringBuilder(impl: CharSequence) = ifaceHandler(impl) | |
| inline fun ifaceHandler(seq: CharSequence): Int { | |
| var sum = 0 | |
| for (idx in 0 ..< seq.length) { | |
| sum += seq[idx].code | |
| } | |
| return sum | |
| } | |
| // CHECK-LABEL: define ptr @"kfun:#box(){}kotlin.String" | |
| // CHECK-LABEL: epilogue: | |
| fun box(): String { | |
| val result1 = wrapString("OK") | |
| if (result1 != 154) | |
| return "fail 1: $result1" | |
| buildString { | |
| append("OK") | |
| val result2 = wrapStringBuilder(this) | |
| if (result2 != 154) | |
| return "fail 2: $result2" | |
| } | |
| return "OK" | |
| } |