K1: introduce BUILDER_INFERENCE_STUB_PARAMETER_TYPE to prevent compiler crashes

This diagnostic is reported in rare situations when
StubTypeForBuilderInference is kept as a parameter type
of for loop or lambda. Before this commit, we had in K1
"Could not load module <error module>" from IrLinker instead.

Related to: KT-52757, KT-53109, KT-63841, KT-64066
#KT-53478 Fixed
This commit is contained in:
Mikhail Glukhikh
2024-02-26 10:06:29 +01:00
committed by Space Team
parent 6f6e37f552
commit 678816f9e8
44 changed files with 554 additions and 15 deletions
@@ -2,8 +2,7 @@
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND_K1: ANY
// REASON: compile-time failure in K1/JVM (java.lang.AssertionError: Could not load module <Error module> @ org.jetbrains.kotlin.backend.common.serialization.KotlinIrLinker.resolveModuleDeserializer)
// REASON: compile-time failure in K1/Native, K1/WASM, K1/JS (java.lang.NullPointerException @ org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.DescriptorExportCheckerVisitor.isExported)
// Reason: red code
fun box(): String {
build {
@@ -2,8 +2,7 @@
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND_K1: ANY
// REASON: compile-time failure in K1/JVM (java.lang.AssertionError: Could not load module <Error module> @ org.jetbrains.kotlin.backend.common.serialization.KotlinIrLinker.resolveModuleDeserializer)
// REASON: compile-time failure in K1/Native, K1/WASM, K1/JS (java.lang.NullPointerException @ org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.DescriptorExportCheckerVisitor.isExported)
// REASON: red code
fun box(): String {
build {
@@ -0,0 +1,19 @@
// ISSUE: KT-53478
// IGNORE_BACKEND_K1: ANY
// Reason: red code
class UncompilingClass<T : Any>(
val block: (UncompilingClass<T>.() -> Unit)? = null,
) {
var uncompilingFun: ((T) -> Unit)? = null
}
fun handleInt(arg: Int) = Unit
fun box(): String {
val obj = UncompilingClass {
uncompilingFun = { handleInt(it) }
}
return "OK"
}
@@ -0,0 +1,13 @@
// WITH_STDLIB
// ISSUE: KT-64066
// IGNORE_BACKEND_K1: ANY
// Reason: red code
fun box(): String {
val map = buildMap {
put(1, 1)
for (v in values) {}
}
if (map[1] != 1) return "FAIL"
return "OK"
}