| 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 |