blob: 19686a1c8020a9e537097cc0607396372b45d6fd [file]
// DONT_TARGET_EXACT_BACKEND: JVM
// ^Implementing sealed interfaces in a different module fails with IncompatibleClassChangeError starting from JVM 17
// WITH_STDLIB
// LANGUAGE: +NoWhenBranchMatchedExceptionWithMessage
// MODULE: m1
// FILE: m1.kt
package pkg1
sealed interface S
class K : S
fun test(s: S): String {
return when (s) {
is K -> ""
}
}
// MODULE: m2(m1)
// FILE: box.kt
package pkg2
import pkg1.*
@Suppress("SEALED_SUPERTYPE_IN_LOCAL_CLASS")
fun box(): String {
try {
test(object : S { })
} catch (e: Exception) {
val m = e.message!!
val suffix = when(BACKEND_UNDER_TEST) {
"WASM_JS", "WASM_WASI" -> "pkg2.<no name provided>"
"JS_IR", "JS_IR_ES6" -> "[object Object]"
"NATIVE" -> $$"pkg2.box$1"
else -> $$"pkg2.BoxKt$box$1"
}
if (!m.startsWith("No branch matched for subject: " + suffix)) return "wrong message: $m"
return "OK"
}
return "exception was expected"
}
/* GENERATED_FIR_TAGS: classDeclaration, functionDeclaration, isExpression, javaFunction, javaType, sealed,
stringLiteral, whenExpression, whenWithSubject */