adb9dfb256
Previously (few commits earlier), it contained two versions of receiver (lhs) generated separately for each desugaring version that looked a bit redundant. Now, at FIR building stage we just don't create desugaring sub-trees, instead they are being built during bodies transformation and that seems to be much convenient there, since we don't need to reverse-engineer get-set-operator version to check if containing calls are successful (as we just built those calls and retain them) Semantically, this changes may only change how data flow works for such statements (see changed compatibilityResolveWithVarargAndOperatorCall.kt) ^KT-50861 Relates
41 lines
1.0 KiB
Kotlin
Vendored
41 lines
1.0 KiB
Kotlin
Vendored
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
|
|
|
fun testArrayAccess1(array: Array<Any>) {
|
|
array<!UNREACHABLE_CODE!>[<!>todo()<!UNREACHABLE_CODE!>]<!>
|
|
}
|
|
|
|
fun testArrayAccess2() {
|
|
operator fun Nothing.get(i: Int, s: String) {}
|
|
todo()<!UNREACHABLE_CODE!>[1, ""]<!>
|
|
}
|
|
|
|
fun testAraryAccess3() {
|
|
operator fun Nothing.get(n: Nothing) {}
|
|
todo()<!UNREACHABLE_CODE!>[todo()]<!>
|
|
}
|
|
|
|
fun testArrayAssignment1(array: Array<Any>) {
|
|
array<!UNREACHABLE_CODE!>[<!>todo()<!UNREACHABLE_CODE!>] = 11<!>
|
|
}
|
|
|
|
fun testArrayAssignment2(array: Array<Any>) {
|
|
array<!UNREACHABLE_CODE!>[<!>1<!UNREACHABLE_CODE!>] =<!> todo()
|
|
}
|
|
|
|
fun testArrayAssignment3(n: Nothing) {
|
|
operator fun Nothing.set(i: Int, j: Int) {}
|
|
n<!UNREACHABLE_CODE!>[1] = 2<!>
|
|
}
|
|
|
|
fun testArrayAssignment4(n: Nothing) {
|
|
operator fun Nothing.set(i: Int, a: Any) {}
|
|
n<!UNREACHABLE_CODE!>[1] = todo()<!>
|
|
}
|
|
|
|
fun testArrayPlusAssign(array: Array<Any>) {
|
|
operator fun Any.plusAssign(a: Any) {}
|
|
array[1] <!UNREACHABLE_CODE!>+=<!> todo()
|
|
}
|
|
|
|
fun todo(): Nothing = throw Exception()
|