| fun foo(block: () -> String): String = block() | |
| inline fun bar(crossinline f: () -> String) = foo { f() } | |
| fun flaf() { | |
| val revoked = "A" | |
| bar { | |
| synchronized (revoked) { | |
| "B" | |
| } | |
| } | |
| } | |
| // The field $revoked$inlined should be loaded only once and stored in a local | |
| // that is used for the monitor enter/exit instructions. Locking and unlocking | |
| // directly on a field load makes it hard for the JVM to prove that locking is | |
| // balanced which causes the code to be interpreted. See KT-48367 for details. | |
| // 1 GETFIELD Kt48367Kt\$flaf\$\$inlined\$bar\$1.\$revoked\$inlined : Ljava/lang/String; | |
| // 1 MONITORENTER | |
| // 2 MONITOREXIT |