blob: 08a759f61b4cd1ecbb93048486feedea5457dfeb [file]
// WITH_STDLIB
// This test demonstrates a situation when a reference for a stub local inline function in not inlined
// at the 1st phase of double-inlining. See KT-69470 for more details.
// The test itself is not muted because a special condition was added to `validateIrAfterInliningOnlyPrivateFunctions`.
// FILE: 1.kt
private fun isO(item: Char) = item == 'O'
public fun isK(item: Char) = item == 'K'
public inline fun List<Char>.filterCharsPublic(predicate: (Char) -> Boolean): List<Char> {
val result = ArrayList<Char>(size)
for (char in this) {
if (predicate(char)) result.add(char)
}
return result
}
private inline fun List<Char>.filterCharsPrivate(predicate: (Char) -> Boolean): List<Char> {
val result = ArrayList<Char>(size)
for (char in this) {
if (predicate(char)) result.add(char)
}
return result
}
fun test(): String {
val chars = listOf('K', 'L', 'M', 'N', 'O')
val o1 = chars.filterCharsPublic(::isO)
val k1 = chars.filterCharsPublic(::isK)
val ok1 = o1[0].toString() + k1[0].toString()
val o2 = chars.filterCharsPrivate(::isO)
val k2 = chars.filterCharsPrivate(::isK)
val ok2 = o2[0].toString() + k2[0].toString()
return if (ok1 == ok2) ok1 else "Fail: ok1=$ok1, ok2=$ok2"
}
// FILE: 2.kt
fun box(): String {
return test()
}