| // CHECK_BYTECODE_LISTING |
| // FIR_IDENTICAL |
| // WITH_STDLIB |
| // TARGET_BACKEND: JVM_IR |
| // LANGUAGE: +ValueClasses |
| |
| @JvmInline |
| value class DPoint(val x: Double, val y: Double) |
| |
| fun `1`() = 1.0 |
| fun `2`() = 2.0 |
| fun `3`() = 3.0 |
| fun `4`() = 4.0 |
| |
| fun acceptBoxed(x: Any?) {} |
| fun acceptFlattened(x: DPoint) {} |
| fun returnBoxed() = DPoint(`3`(), `4`()) |
| |
| fun testFlattened2Boxed() { |
| acceptBoxed(DPoint(`1`(), `2`())) |
| } |
| |
| fun testBoxed2Boxed() { |
| acceptBoxed(returnBoxed()) |
| } |
| |
| fun testFlattened2Flattened() { |
| acceptFlattened(DPoint(`1`(), `2`())) |
| } |
| |
| fun testBoxed2Flattened() { |
| acceptFlattened(returnBoxed()) |
| } |
| |
| fun testIgnoredFlattened() { |
| DPoint(`1`(), `2`()) |
| DPoint(`1`(), `2`()) |
| } |
| |
| fun testIgnoredBoxed() { |
| returnBoxed() |
| } |
| |
| object Init { |
| init { |
| DPoint(`1`(), `2`()) |
| DPoint(`1`(), `2`()) |
| } |
| } |
| |
| // 1 testFlattened2Boxed\(\)V(\n {3}.*)*((\n {3}.*box-impl .*)(\n {3}.*)*){1} |
| // 0 testFlattened2Boxed\(\)V(\n {3}.*)*((\n {3}.*box-impl.*)(\n {3}.*)*){2} |
| // 0 testBoxed2Boxed\(\)V(\n {3}.*)*((\n {3}.*(box-impl|DSTORE|DLOAD).*)(\n {3}.*)*){1} |
| // 0 testFlattened2Flattened\(\)V(\n {3}.*)*((\n {3}.*box-impl.*)(\n {3}.*)*){1} |
| // 1 testFlattened2Flattened\(\)V(\n {3}.*)*((\n {3}.*DSTORE.*)(\n {3}.*)*){2} |
| // 0 testFlattened2Flattened\(\)V(\n {3}.*)*((\n {3}.*DSTORE.*)(\n {3}.*)*){3} |
| // 0 testBoxed2Flattened\(\)V(\n {3}.*)*((\n {3}.*box-impl .*)(\n {3}.*)*){1} |
| // 1 testBoxed2Flattened\(\)V(\n {3}.*)*((\n {3}.*unbox-impl.*)(\n {3}.*)*){2} |
| // 0 testBoxed2Flattened\(\)V(\n {3}.*)*((\n {3}.*unbox-impl.*)(\n {3}.*)*){3} |
| // 0 testIgnoredFlattened\(\)V(\n {3}.*)*((\n {3}.*box-impl.*)(\n {3}.*)*){1} |
| // 0 testIgnoredBoxed\(\)V(\n {3}.*)*((\n {3}.*box-impl.*)(\n {3}.*)*){1} |
| // 0 Init.*((\n {1}.*)*(\n {1}.*box-impl.*)){1} |