// WITH_STDLIB // WORKS_WHEN_VALUE_CLASS // LANGUAGE: +ValueClasses, +GenericInlineClassParameter OPTIONAL_JVM_INLINE_ANNOTATION value class WithPrimitive(val a: T) fun takeWithPrimitive(a: WithPrimitive) {} OPTIONAL_JVM_INLINE_ANNOTATION value class WithReference(val a: T) fun takeWithReference(a: WithReference) {} OPTIONAL_JVM_INLINE_ANNOTATION value class WithNullableReference(val a: T) fun takeWithNullableReference(a: WithNullableReference) {} OPTIONAL_JVM_INLINE_ANNOTATION value class WithNullableReference2(val a: T?) fun takeWithNullableReference2(a: WithNullableReference2) {} fun foo(a: WithPrimitive?, b: WithPrimitive) { takeWithPrimitive(a!!) // unbox takeWithPrimitive(a) // unbox takeWithPrimitive(b!!) } fun bar(a: WithReference?, b: WithReference) { takeWithReference(a!!) takeWithReference(a) takeWithReference(b!!) } fun baz(a: WithNullableReference?, b: WithNullableReference) { takeWithNullableReference(a!!) // unbox takeWithNullableReference(a) // unbox takeWithNullableReference(a!!) // unbox takeWithNullableReference(b!!) } fun baz2(a: WithNullableReference2?, b: WithNullableReference2) { takeWithNullableReference2(a!!) // unbox takeWithNullableReference2(a) // unbox takeWithNullableReference2(a!!) // unbox takeWithNullableReference2(b!!) } fun box(): String { val a1 = WithPrimitive(1) val b1 = WithPrimitive(2) foo(a1, b1) val a2 = WithReference("") bar(a2, a2) val a3 = WithNullableReference("test") val a4 = WithNullableReference(123) baz(a3, a4) val a32 = WithNullableReference2("test") val a42 = WithNullableReference2(123) baz2(a32, a42) return "OK" }