// !LANGUAGE: +InlineClasses // IGNORE_BACKEND_FIR: JVM_IR inline class AsAny(val x: Any?) inline class AsInt(val x: Int) inline fun Any?.checkcast(): T = this as T object Reference { fun transform(a: AsAny): AsAny = a as AsAny fun transformNullable(a: AsAny?): AsAny = a as AsAny fun transformToNullable(a: AsAny): AsAny? = a as AsAny fun transformToNullableTarget(a: AsAny): AsAny? = a as AsAny? fun transformNullableToNullableTarget(a: AsAny?): AsAny? = a as AsAny? } object Primitive { fun transform(a: AsInt): AsInt = a as AsInt fun transformNullable(a: AsInt?): AsInt = a as AsInt fun transformToNullable(a: AsInt): AsInt? = a as AsInt fun transformToNullableTarget(a: AsInt): AsInt? = a as AsInt? fun transformNullableToNullableTarget(a: AsInt?): AsInt? = a as AsInt? } fun box(): String { val a = AsAny(42) val b1 = Reference.transform(a) val b2 = Reference.transformNullable(a) val b3 = Reference.transformToNullable(a) val b4 = Reference.transformToNullableTarget(a) val b5 = Reference.transformNullableToNullableTarget(a) val b6 = Reference.transformNullableToNullableTarget(null) val b7 = a.checkcast>() if (b7.x != a.x) return "Fail 1" val c = AsInt(42) val d1 = Primitive.transform(c) val d2 = Primitive.transformNullable(c) val d3 = Primitive.transformToNullable(c) val d4 = Primitive.transformToNullableTarget(c) val d5 = Primitive.transformNullableToNullableTarget(c) val d6 = Primitive.transformNullableToNullableTarget(null) val d7 = c.checkcast() if (d7.x != c.x) return "Fail 2" return "OK" }