// TARGET_BACKEND: JVM // KOTLIN_CONFIGURATION_FLAGS: ASSERTIONS_MODE=jvm // FILE: inline.kt // WITH_RUNTIME // NO_CHECK_LAMBDA_INLINING package test object CrossinlineLambdaContainer { inline fun call(crossinline c: () -> Unit) { val l = { c() } l() } } // FILE: inlineSite.kt import test.CrossinlineLambdaContainer.call interface Checker { fun checkTrue(): Boolean fun checkFalse(): Boolean fun checkTrueWithMessage(): Boolean fun checkFalseWithMessage(): Boolean } class ShouldBeDisabled : Checker { override fun checkTrue(): Boolean { var hit = false val l = { hit = true; true } call { assert(l()) } return hit } override fun checkFalse(): Boolean { var hit = false val l = { hit = true; false } call { assert(l()) } return hit } override fun checkTrueWithMessage(): Boolean { var hit = false val l = { hit = true; true } call { assert(l()) { "BOOYA" } } return hit } override fun checkFalseWithMessage(): Boolean { var hit = false val l = { hit = true; false } call { assert(l()) { "BOOYA" } } return hit } } class ShouldBeEnabled : Checker { override fun checkTrue(): Boolean { var hit = false val l = { hit = true; true } call { assert(l()) } return hit } override fun checkFalse(): Boolean { var hit = false val l = { hit = true; false } call { assert(l()) } return hit } override fun checkTrueWithMessage(): Boolean { var hit = false val l = { hit = true; true } call { assert(l()) { "BOOYA" } } return hit } override fun checkFalseWithMessage(): Boolean { var hit = false val l = { hit = true; false } call { assert(l()) { "BOOYA" } } return hit } } fun setDesiredAssertionStatus(v: Boolean): Checker { val loader = Checker::class.java.classLoader loader.setDefaultAssertionStatus(v) val c = loader.loadClass(if (v) "ShouldBeEnabled" else "ShouldBeDisabled") return c.newInstance() as Checker } fun box(): String { var c = setDesiredAssertionStatus(false) if (c.checkTrue()) return "FAIL 0" if (c.checkTrueWithMessage()) return "FAIL 1" if (c.checkFalse()) return "FAIL 2" if (c.checkFalseWithMessage()) return "FAIL 3" c = setDesiredAssertionStatus(true) if (!c.checkTrue()) return "FAIL 4" if (!c.checkTrueWithMessage()) return "FAIL 5" try { c.checkFalse() return "FAIL 6" } catch (ignore: AssertionError) { } try { c.checkFalseWithMessage() return "FAIL 7" } catch (ignore: AssertionError) { } return "OK" }