// IGNORE_BACKEND_FIR: JVM_IR // KJS_WITH_FULL_RUNTIME // WITH_RUNTIME class Itr : Iterator by ArrayList().iterator() class MItr : MutableIterator by ArrayList().iterator() class LItr : ListIterator by ArrayList().listIterator() class MLItr : MutableListIterator by ArrayList().listIterator() class It : Iterable by ArrayList() class MIt : MutableIterable by ArrayList() class C : Collection by ArrayList() class MC : MutableCollection by ArrayList() class L : List by ArrayList() class ML : MutableList by ArrayList() class S : Set by HashSet() class MS : MutableSet by HashSet() class M : Map by HashMap() class MM : MutableMap by HashMap() class ME : Map.Entry { override val key: String get() = throw UnsupportedOperationException() override val value: String get() = throw UnsupportedOperationException() } class MME : MutableMap.MutableEntry { override val key: String get() = throw UnsupportedOperationException() override val value: String get() = throw UnsupportedOperationException() override fun setValue(value: String): String = throw UnsupportedOperationException() } inline fun reifiedAsSucceeds(x: Any, operation: String) { try { x as T } catch (e: Throwable) { throw AssertionError("$operation: should not throw exceptions, got $e") } } inline fun reifiedAsFailsWithCCE(x: Any, operation: String) { try { x as T } catch (e: ClassCastException) { return } catch (e: Throwable) { throw AssertionError("$operation: should throw ClassCastException, got $e") } throw AssertionError("$operation: should fail with CCE, no exception thrown") } fun box(): String { val itr = Itr() as Any val mitr = MItr() reifiedAsFailsWithCCE>(itr, "reifiedAs>(itr)") reifiedAsSucceeds>(mitr, "reifiedAs>(mitr)") val litr = LItr() as Any val mlitr = MLItr() reifiedAsFailsWithCCE>(litr, "reifiedAs>(litr)") reifiedAsFailsWithCCE>(litr, "reifiedAs>(litr)") reifiedAsSucceeds>(mlitr, "reifiedAs>(mlitr)") val it = It() as Any val mit = MIt() val arrayList = ArrayList() reifiedAsFailsWithCCE>(it, "reifiedAs>(it)") reifiedAsSucceeds>(mit, "reifiedAs>(mit)") reifiedAsSucceeds>(arrayList, "reifiedAs>(arrayList)") val coll = C() as Any val mcoll = MC() reifiedAsFailsWithCCE>(coll, "reifiedAs>(coll)") reifiedAsFailsWithCCE>(coll, "reifiedAs>(coll)") reifiedAsSucceeds>(mcoll, "reifiedAs>(mcoll)") reifiedAsSucceeds>(mcoll, "reifiedAs>(mcoll)") reifiedAsSucceeds>(arrayList, "reifiedAs>(arrayList)") val list = L() as Any val mlist = ML() reifiedAsFailsWithCCE>(list, "reifiedAs>(list)") reifiedAsFailsWithCCE>(list, "reifiedAs>(list)") reifiedAsFailsWithCCE>(list, "reifiedAs>(list)") reifiedAsSucceeds>(mlist, "reifiedAs>(mlist)") reifiedAsSucceeds>(mlist, "reifiedAs>(mlist)") reifiedAsSucceeds>(mlist, "reifiedAs>(mlist)") reifiedAsSucceeds>(arrayList, "reifiedAs>(arrayList)") val set = S() as Any val mset = MS() val hashSet = HashSet() reifiedAsFailsWithCCE>(set, "reifiedAs>(set)") reifiedAsFailsWithCCE>(set, "reifiedAs>(set)") reifiedAsFailsWithCCE>(set, "reifiedAs>(set)") reifiedAsSucceeds>(mset, "reifiedAs>(mset)") reifiedAsSucceeds>(mset, "reifiedAs>(mset)") reifiedAsSucceeds>(mset, "reifiedAs>(mset)") reifiedAsSucceeds>(hashSet, "reifiedAs>(hashSet)") reifiedAsSucceeds>(hashSet, "reifiedAs>(hashSet)") reifiedAsSucceeds>(hashSet, "reifiedAs>(hashSet)") val map = M() as Any val mmap = MM() val hashMap = HashMap() reifiedAsFailsWithCCE>(map, "reifiedAs>(map)") reifiedAsSucceeds>(mmap, "reifiedAs>(mmap)") reifiedAsSucceeds>(hashMap, "reifiedAs>(hashMap)") val entry = ME() as Any val mentry = MME() hashMap[""] = "" val hashMapEntry = hashMap.entries.first() reifiedAsFailsWithCCE>(entry, "reifiedAs>(entry)") reifiedAsSucceeds>(mentry, "reifiedAs>(mentry)") reifiedAsSucceeds>(hashMapEntry, "reifiedAs>(hashMapEntry)") return "OK" }