| // CHECK_BYTECODE_LISTING |
| // FIR_IDENTICAL |
| // WITH_STDLIB |
| // TARGET_BACKEND: JVM_IR |
| // LANGUAGE: +ValueClasses |
| |
| @JvmInline |
| value class DPoint(val x: Double, val y: Double) { |
| init { |
| require(x != 0.0 && y != 0.0) |
| } |
| } |
| |
| fun tryOk() = try { |
| DPoint(1.0, 2.0) |
| } catch(_: Throwable) { |
| DPoint(0.0, 3.0) |
| } finally { |
| DPoint(4.0, 5.0) |
| } |
| |
| fun tryFail1() = try { |
| DPoint(0.0, 1.0) |
| } catch(_: Throwable) { |
| DPoint(2.0, 3.0) |
| } finally { |
| DPoint(4.0, 5.0) |
| } |
| |
| fun tryFail2() = try { |
| DPoint(1.0, 2.0) |
| } catch(_: Throwable) { |
| DPoint(3.0, 4.0) |
| } finally { |
| DPoint(5.0, 0.0) |
| } |
| |
| fun box(): String { |
| require(runCatching { tryOk() } == Result.success(DPoint(1.0, 2.0))) |
| require(runCatching { tryFail1() } == Result.success(DPoint(2.0, 3.0))) |
| require(runCatching { tryFail2() }.isFailure) |
| return "OK" |
| } |