// WITH_STDLIB // WORKS_WHEN_VALUE_CLASS // LANGUAGE: +ValueClasses, +InlineLateinit @file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") OPTIONAL_JVM_INLINE_ANNOTATION value class IC1(val x: String) lateinit var a: IC1 OPTIONAL_JVM_INLINE_ANNOTATION value class IC2(val x: T) class MyClass { lateinit var b: IC2 fun isInit() = ::b.isInitialized } OPTIONAL_JVM_INLINE_ANNOTATION value class IC3(val x: Comparable) OPTIONAL_JVM_INLINE_ANNOTATION value class IC4(val x: IC1) lateinit var c: IC4 inline fun assertThrows(block: () -> Unit): Boolean { try { block.invoke() } catch (t: Throwable) { return t is T } return false } fun box(): String { if (::a.isInitialized) return "Fail 1.1" if (!assertThrows { val t = a }) return "Fail 1.2" a = IC1("a") if (!::a.isInitialized) return "Fail 1.3" if (a.x != "a") return "Fail 1.4" val inst = MyClass() if (inst.isInit()) return "Fail 2.1" if (!assertThrows { val t = inst.b }) return "Fail 2.2" inst.b = IC2(42) if (!inst.isInit()) return "Fail 2.3" if (inst.b.x != 42) return "Fail 2.4" lateinit var z: IC3 if (!assertThrows { val t = z }) return "Fail 3.1" z = IC3(5.0) if (z.x != 5.0) return "Fail 3.2" if (::c.isInitialized) return "Fail 4.1" if (!assertThrows { val t = c }) return "Fail 4.2" c = IC4(IC1("c")) if (!::c.isInitialized) return "Fail 4.3" if (c.x.x != "c") return "Fail 4.4" return "OK" } //CHECK_BYTECODE_TEXT // JVM_IR_TEMPLATES // 0 INVOKESTATIC IC1.box-impl // 0 INVOKESTATIC IC2.box-impl // 0 INVOKESTATIC IC3.box-impl // 0 INVOKESTATIC IC4.box-impl