Files
kotlin-fork/compiler/testData/codegen/boxInline/reified/nonCapturingObjectInLambda.kt
T
pyos 2f0f4e570f JVM_IR: do not remap locals in contexts nested inside lambdas
The only case where this code is reachable at all is objects in lambdas
that use reified type parameters of the outer inline function. Since the
type parameters are declared outside the inlining root, regenerating the
object is actually pointless, and remapping its captures even more so
(not to mention that the code under the condition uses the captures of
the lambda, not of the method it's currently transforming).
2020-01-22 15:36:09 +01:00

20 lines
628 B
Kotlin
Vendored

// FILE: 1.kt
package test
inline fun <R> myRun(g: () -> R) = g()
// FILE: 2.kt
import test.*
inline fun <reified A> Any?.complicatedCast() =
myRun { // 1. Inline function call with a lambda
object { // 2. Anonymous object inside a lambda
fun f(x: Any?): A { // 3. Anonymous object uses a reified type parameter
val y = x // 4. A method in that object uses locals
return y as A
}
}.f(this) // 5. The lambda captures more values than the object
}
fun box() = "OK".complicatedCast<String>()