// !LANGUAGE: +AllowContractsForCustomFunctions +UseReturnsEffect +AllowReifiedGenericsInContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE import kotlin.contracts.* inline fun requireIsInstance(value: Any?) { contract { returns() implies (value is T) } if (value !is T) { throw IllegalArgumentException() } } inline fun cast(value: Any?): T { contract { returns() implies (value is T) } return value as T } fun test_1(x: Any) { requireIsInstance(x) x.length } fun test_2(x: Any) { val s: String = cast(x) x.length }