// RUN_PIPELINE_TILL: BACKEND
// FIR_IDENTICAL
// ISSUE: KT-58874
// WITH_STDLIB
// FIR_DUMP

import kotlin.reflect.KProperty

class State<S>(var value: S)
operator fun <V> State<V>.getValue(thisRef: Any?, property: KProperty<*>) = value
inline fun <M> remember(block: () -> M): M = block()

// list should have a type of List<Int>, not Any?
val list0 by remember { State(listOf(1)) }

fun expectInt(i: Int) {
    println(i)
}

fun main() {
    val list1 by remember { State(listOf(1)) }
    expectInt(list0[0])
    expectInt(list1[0])
}

/* GENERATED_FIR_TAGS: classDeclaration, funWithExtensionReceiver, functionDeclaration, functionalType, inline,
integerLiteral, lambdaLiteral, localProperty, nullableType, operator, primaryConstructor, propertyDeclaration,
propertyDelegate, starProjection, typeParameter */
