[FIR] Let prefix inc/dec call getter twice for compatibility with K1

#KT-57179 Fixed
This commit is contained in:
Kirill Rakhman
2023-03-15 17:24:40 +01:00
committed by Space Team
parent fea344faa4
commit 45d2424ad8
50 changed files with 1391 additions and 794 deletions
-46
View File
@@ -1,46 +0,0 @@
class IncDec() {
operator fun inc() : IncDec = this
operator fun dec() : IncDec = this
}
fun testIncDec() {
var x = IncDec()
x++
++x
x--
--x
x = x++
x = x--
x = ++x
x = --x
}
class WrongIncDec() {
<!INAPPLICABLE_OPERATOR_MODIFIER!>operator<!> fun inc() : Int = 1
<!INAPPLICABLE_OPERATOR_MODIFIER!>operator<!> fun dec() : Int = 1
}
fun testWrongIncDec() {
var x = WrongIncDec()
x<!RESULT_TYPE_MISMATCH!>++<!>
<!RESULT_TYPE_MISMATCH!>++x<!>
x<!RESULT_TYPE_MISMATCH!>--<!>
<!RESULT_TYPE_MISMATCH!>--x<!>
}
class UnitIncDec() {
<!INAPPLICABLE_OPERATOR_MODIFIER!>operator<!> fun inc() : Unit {}
<!INAPPLICABLE_OPERATOR_MODIFIER!>operator<!> fun dec() : Unit {}
}
fun testUnitIncDec() {
var x = UnitIncDec()
x<!INC_DEC_SHOULD_NOT_RETURN_UNIT!>++<!>
<!INC_DEC_SHOULD_NOT_RETURN_UNIT!>++<!>x
x<!INC_DEC_SHOULD_NOT_RETURN_UNIT!>--<!>
<!INC_DEC_SHOULD_NOT_RETURN_UNIT!>--<!>x
x = x<!INC_DEC_SHOULD_NOT_RETURN_UNIT!>++<!>
x = x<!INC_DEC_SHOULD_NOT_RETURN_UNIT!>--<!>
x = <!INC_DEC_SHOULD_NOT_RETURN_UNIT, INC_DEC_SHOULD_NOT_RETURN_UNIT!>++<!>x
x = <!INC_DEC_SHOULD_NOT_RETURN_UNIT, INC_DEC_SHOULD_NOT_RETURN_UNIT!>--<!>x
}
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
class IncDec() {
operator fun inc() : IncDec = this
operator fun dec() : IncDec = this
@@ -18,7 +18,7 @@ object MismatchingTypes {
}
fun testMismatchingTypes() {
++<!ARGUMENT_TYPE_MISMATCH!>MismatchingTypes[0]<!>
<!ARGUMENT_TYPE_MISMATCH!>++MismatchingTypes[0]<!>
<!ARGUMENT_TYPE_MISMATCH!>MismatchingTypes[0]++<!>
MismatchingTypes[0] <!UNRESOLVED_REFERENCE!>+=<!> 1
}
@@ -0,0 +1,15 @@
// Breaking change in K2, see KT-57178
open class I {
operator fun inc(): ST = ST()
}
class ST : I()
var topLevel: I
get() = I()
set(value) {}
fun main() {
val x: ST = <!INITIALIZER_TYPE_MISMATCH!>++topLevel<!>
}
@@ -0,0 +1,15 @@
// Breaking change in K2, see KT-57178
open class I {
operator fun inc(): ST = ST()
}
class ST : I()
var topLevel: I
get() = I()
set(value) {}
fun main() {
val x: ST = ++topLevel
}
@@ -0,0 +1,13 @@
// Changed in K2, see KT-57178
open class I {
operator fun inc(): ST = ST()
}
class ST : I()
fun main() {
var local = I()
val x: ST = ++local
val y: ST = local
}
@@ -0,0 +1,13 @@
// Changed in K2, see KT-57178
open class I {
operator fun inc(): ST = ST()
}
class ST : I()
fun main() {
var local = I()
val x: ST = ++local
val y: ST = <!TYPE_MISMATCH!>local<!>
}