// TARGET_BACKEND: JVM
// ^^^ java.lang.reflect.* is available only in JDK
// WITH_STDLIB
// FULL_JDK

fun Any.copyValueIfNeeded(): Any {
    return when (this) {
        is Array<*> -> java.lang.reflect.Array.newInstance(this::class.java.componentType, size).apply {
            this as Array<Any?>
            (this@copyValueIfNeeded as Array<Any?>).forEachIndexed { i, value -> this[i] = value?.copyValueIfNeeded() }
        }
        else -> this
    }
}

fun box(): String {
    val res = arrayOf("FAIL", "OK").copyValueIfNeeded() as Array<String>
    return res[1]
}