Files
kotlin-fork/compiler/testData/diagnostics/nativeTests/forwardDeclarations.ll.kt
T
Ilya Kirillov 3a90cb00c7 [LL FIR] reuse the same function for registering K/N FIR session components as in the compiler
So, if a new component is registered in the compiler, it's not forgotten for the LL FIR

This registers `FirDelegatedMembersFilter` for K/N modules and fixes KT-64528

^KT-64528 fixed
2024-01-18 15:43:52 +00:00

110 lines
3.1 KiB
Kotlin
Vendored

// LL_FIR_DIVERGENCE
// KT-62936
// LL_FIR_DIVERGENCE
// WITH_STDLIB
// FILE: stdlib.kt
package kotlinx.cinterop
abstract class CStructVar
interface ObjCObject
abstract class ObjCObjectBase : ObjCObject
// FILE: cnames.kt
package cnames.structs
class FwdStruct {}
// FILE: objcnamesClasses.kt
package objcnames.classes
class FwdObjcClass {}
// FILE: objcnamesProtocols.kt
package objcnames.protocols
interface FwdProtocol {}
// FILE: lib.kt
package lib
import kotlinx.cinterop.*
class FwdStruct : CStructVar()
class FwdObjcClass : ObjCObjectBase()
interface FwdProtocol : ObjCObject
// FILE: lib2.kt
package lib2
class FwdStruct
class FwdObjcClass
interface FwdProtocol
// FILE: main.kt
// this inspections differs in K1/K2, but unrelated to what is tested in this test
@file:Suppress("UNUSED_PARAMETER", "UNUSED_EXPRESSION", "UNUSED_VARIABLE", <!ERROR_SUPPRESSION!>"INCOMPATIBLE_TYPES"<!>)
fun testUnckeckedAsFromAny(x: Any) {
x as? cnames.structs.FwdStruct
x as? objcnames.classes.FwdObjcClass
x as? objcnames.protocols.FwdProtocol
if (1 > 0) { x as cnames.structs.FwdStruct }
if (1 > 0) { x as objcnames.classes.FwdObjcClass }
if (1 > 0) { x as objcnames.protocols.FwdProtocol }
}
fun testIs(x: Any) : Int {
return when {
x is cnames.structs.FwdStruct -> 1
x is objcnames.classes.FwdObjcClass -> 2
x is objcnames.protocols.FwdProtocol -> 3
else -> 4
}
}
fun testIs2(x: lib.FwdStruct) = x is cnames.structs.FwdStruct
fun testIs3(x: lib.FwdObjcClass) = x is objcnames.classes.FwdObjcClass
fun testIs4(x: lib.FwdProtocol) = x is objcnames.protocols.FwdProtocol
fun testClass1(x : cnames.structs.FwdStruct) = x::class
fun testClass2(x : objcnames.classes.FwdObjcClass) = x::class
fun testClass3(x : objcnames.protocols.FwdProtocol) = x::class
fun testClass4() {
cnames.structs.FwdStruct::class
objcnames.classes.FwdObjcClass::class
objcnames.protocols.FwdProtocol::class
}
inline fun <reified T> inlineF(x: T) {}
fun testInline1(x : cnames.structs.FwdStruct) = inlineF(x)
fun testInline2(x : objcnames.classes.FwdObjcClass) = inlineF(x)
fun testInline3(x : objcnames.protocols.FwdProtocol) = inlineF(x)
fun testInline4() {
val a : (cnames.structs.FwdStruct) -> Unit = ::inlineF
val b : (objcnames.classes.FwdObjcClass) -> Unit = ::inlineF
val c : (objcnames.protocols.FwdProtocol) -> Unit = ::inlineF
}
fun testCheckedAs1(x : lib.FwdStruct) = x as cnames.structs.FwdStruct
fun testCheckedAs2(x : lib.FwdObjcClass) = x as objcnames.classes.FwdObjcClass
fun testCheckedAs3(x : lib.FwdProtocol) = x as objcnames.protocols.FwdProtocol
fun testCheckedSafeAs4(x : lib.FwdStruct) = x as? cnames.structs.FwdStruct
fun testCheckedSafeAs5(x : lib.FwdObjcClass) = x as? objcnames.classes.FwdObjcClass
fun testCheckedSafeAs6(x : lib.FwdProtocol) = x as? objcnames.protocols.FwdProtocol
fun testUnCheckedAs1(x : lib2.FwdStruct) = x as cnames.structs.FwdStruct
fun testUnCheckedAs2(x : lib2.FwdObjcClass) = x as objcnames.classes.FwdObjcClass
fun testUnCheckedAs3(x : lib2.FwdProtocol) = x as objcnames.protocols.FwdProtocol
fun testUnCheckedAs4(x : lib.FwdStruct) = x as objcnames.classes.FwdObjcClass