| // LANGUAGE: +InlineClasses, +AvoidWrongOptimizationOfTypeOperatorsOnValueClasses | |
| // FILE: Test.kt | |
| inline fun <R, T> foo(x : R, y : R, block : (R) -> T) : T { | |
| val a = x is Number | |
| val b = x is Object | |
| val a1 = x as Number | |
| val b1 = x as Object | |
| if (a && b) { | |
| return block(x) | |
| } else { | |
| return block(y) | |
| } | |
| } | |
| fun bar() { | |
| foo(1, 2) { x -> x is Int } | |
| } | |
| // @TestKt.class: | |
| // 0 valueOf | |
| // 0 Value\s\(\) | |
| // 2 INSTANCEOF | |
| // 1 CHECKCAST | |
| // FILE: Inline.kt | |
| inline class InlinedInt(val x: Int) | |
| // FILE: TestInlined.kt | |
| fun baz() { | |
| foo(InlinedInt(1), InlinedInt(2)) { x -> x is InlinedInt } | |
| } | |
| // @TestInlinedKt.class: | |
| // 0 valueOf | |
| // 0 Value\s\(\) | |
| // 2 INSTANCEOF | |
| // 2 CHECKCAST | |
| // 0 INVOKESTATIC InlinedInt\$Erased.box | |
| // 1 INVOKEVIRTUAL InlinedInt.unbox |