// SKIP_TXT // ISSUE: KT-57513, KT-58169 fun string(foo: Any) { val string = "" if ("" == foo) foo.length if (string == foo) foo.length if (foo == "") foo.length } fun int(foo: Any) { val int = 1 if (1 == foo) foo.plus(1) if (int == foo) foo.plus(1) if (foo == 1) foo.plus(1) } fun long(foo: Any) { val long = 1L if (1L == foo) foo.plus(1L) if (long == foo) foo.plus(1L) if (foo == 1L) foo.plus(1L) } fun char(foo: Any) { val char = 'a' if ('a' == foo) foo.compareTo('a') if (char == foo) foo.compareTo('a') if (foo == 'a') foo.compareTo('a') } class A { fun a() = Unit } class B { fun b() = Unit; override fun equals(other: Any?): Boolean = this === other } data class C(val x: Int) { fun c() = Unit } open class D { fun d() = Unit } enum class E { ONE; fun e() = Unit } fun testA(foo: A, bar: Any) { if (foo == bar) bar.a() if (bar == foo) bar.a() } fun testNullableA(foo: A?, bar: Any?) { if (foo != null && foo == bar) bar.a() } fun testB(foo: B, bar: Any) { if (foo == bar) bar.b() if (bar == foo) bar.b() } fun testNullableB(foo: B?, bar: B?) { if (foo != null && foo == bar) bar.b() } fun testC(foo: C, bar: Any) { if (foo == bar) bar.c() if (bar == foo) bar.c() } fun testNullableC(foo: C?, bar: C?) { if (foo != null && foo == bar) bar.c() } fun testD(foo: D, bar: Any) { if (foo == bar) bar.d() if (bar == foo) bar.d() } fun testNullableD(foo: D?, bar: D?) { if (foo != null && foo == bar) bar.d() } fun testE(foo: E, bar: Any) { if (foo == bar) bar.e() if (bar == foo) bar.e() } fun testNullableE(foo: E?, bar: E?) { if (foo != null && foo == bar) bar.e() } fun testSmartcast(foo: Any, bar: Any) { if (foo is A && foo == bar) { bar.a() } if (foo is B && foo == bar) { bar.b() } if (foo is C && foo == bar) { bar.c() } if (foo is D && foo == bar) { bar.d() } if (foo is E && foo == bar) { bar.e() } }