[JVM] Improve code coverage of EntriesMapping

Ensure that when .entries is accessed from an inline function body
or lambda argument, EntriesMapping are properly generated and used
without excessive mappings and duplicated fields

#KT-53236
This commit is contained in:
Vsevolod Tolstopyatov
2022-07-22 17:31:56 +02:00
committed by Space
parent 8a181cf2bd
commit c0f81cbc45
21 changed files with 495 additions and 0 deletions
@@ -0,0 +1,35 @@
// TARGET_BACKEND: JVM_IR
// NO_CHECK_LAMBDA_INLINING
// WITH_RUNTIME
// WITH_STDLIB
// MODULE: lib
// FILE: MyEnum.kt
package test
enum class X {
O,
K
}
inline fun test(block: () -> String): String {
return block()
}
// MODULE: caller(lib)
// !LANGUAGE: +EnumEntries
// FILE: 2.kt
import test.*
@OptIn(ExperimentalStdlibApi::class)
fun box(): String {
return test {
X.entries[0].toString()
} + test {
X.entries[1].toString()
}
}
@@ -0,0 +1,28 @@
// TARGET_BACKEND: JVM_IR
// WITH_RUNTIME
// WITH_STDLIB
// MODULE: lib
// FILE: 1.kt
package test
enum class X {
O,
K
}
// MODULE: caller(lib)
// !LANGUAGE: +EnumEntries
// FILE: 2.kt
import test.*
@OptIn(ExperimentalStdlibApi::class)
inline fun test(idx: Int): String {
return X.entries[idx].toString()
}
fun box(): String {
return test(0) + test(1)
}
@@ -0,0 +1,38 @@
// TARGET_BACKEND: JVM_IR
// WITH_RUNTIME
// WITH_STDLIB
// MODULE: lib
// FILE: 1.kt
package test
enum class X {
O,
K
}
enum class Y {
O,
K
}
// MODULE: caller(lib)
// !LANGUAGE: +EnumEntries
// FILE: 2.kt
import test.*
@OptIn(ExperimentalStdlibApi::class)
fun funForAdditionalMappingArrayInMappingFile(): String = Y.entries[1].toString()
@OptIn(ExperimentalStdlibApi::class)
inline fun test(idx: Int): String = X.entries[idx].toString()
// FILE: 3.kt
import test.*
fun box(): String {
return test(0) + test(1)
}
@@ -0,0 +1,38 @@
// TARGET_BACKEND: JVM_IR
// WITH_RUNTIME
// WITH_STDLIB
// MODULE: lib
// FILE: 1.kt
package test
enum class X {
O,
K
}
enum class Y {
O,
K
}
// MODULE: caller(lib)
// !LANGUAGE: +EnumEntries
// FILE: 2.kt
import test.*
@OptIn(ExperimentalStdlibApi::class)
inline fun test(idx: Int): String = X.entries[idx].toString()
@OptIn(ExperimentalStdlibApi::class)
fun funForAdditionalMappingArrayInMappingFile(): String = Y.entries[1].toString()
// FILE: 3.kt
import test.*
fun box(): String {
return test(0) + test(1)
}