// !LANGUAGE: +AllowContractsForCustomFunctions +UseReturnsEffect // !OPT_IN: kotlin.contracts.ExperimentalContracts // !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER import kotlin.contracts.* fun isString(x: Any?): Boolean { contract { returns(true) implies (x is String) } return x is String } fun testEqualsWithConstant(x: Any?) { if (isString(x) == true) { x.length } else { x.length } } fun testNotEqualsWithConstant(x: Any?) { if (isString(x) != true) { x.length } else { x.length } } fun unknownFunction(): Any? = 42 fun testEqualsWithUnknown(x: Any?) { if (isString(x) == unknownFunction()) { x.length } else { x.length } x.length } fun testNotEqualsWithUnknown(x: Any?) { if (isString(x) != unknownFunction()) { x.length } else { x.length } x.length } fun testEqualsWithVariable(x: Any?, b: Boolean) { if (isString(x) == b) { x.length } else { x.length } } fun testNotEqualsWithVariable(x: Any?, b: Boolean) { if (isString(x) != b) { x.length } else { x.length } }