Fixed KT-4814: check type when a += b is a = a+b

In cases when a += b is a = a + b, check that (a+b) can be safely casted to a
This commit is contained in:
Denis Zharkov
2014-07-21 13:12:13 +04:00
committed by Evgeny Gerashchenko
parent 2b67716e95
commit 76845a76b9
3 changed files with 54 additions and 0 deletions
@@ -0,0 +1,48 @@
fun intBinEq() {
var x = 0
x += 'a'
x += 1.toByte()
x += 1.toShort()
<!TYPE_MISMATCH!>x += 1L<!>
<!TYPE_MISMATCH!>x += 1f<!>
<!TYPE_MISMATCH!>x += 1.0<!>
x *= 'a'
x *= 1.toByte()
x *= 1.toShort()
<!TYPE_MISMATCH!>x *= 1L<!>
<!TYPE_MISMATCH!>x *= 1f<!>
<!TYPE_MISMATCH!>x *= 1.0<!>
}
fun shortBinEq() {
var x = 0.toShort()
<!TYPE_MISMATCH!>x += 'a'<!>
<!TYPE_MISMATCH!>x += 1.toByte()<!>
<!TYPE_MISMATCH!>x += 1.toShort()<!>
<!TYPE_MISMATCH!>x += 1L<!>
<!TYPE_MISMATCH!>x += 1f<!>
<!TYPE_MISMATCH!>x += 1.0<!>
<!TYPE_MISMATCH!>x *= 'a'<!>
<!TYPE_MISMATCH!>x *= 1.toByte()<!>
<!TYPE_MISMATCH!>x *= 1.toShort()<!>
<!TYPE_MISMATCH!>x *= 1L<!>
<!TYPE_MISMATCH!>x *= 1f<!>
<!TYPE_MISMATCH!>x *= 1.0<!>
}
class A {
fun plus(x : A) : A { return x }
}
class B {
fun plus(x : A) : A { return x }
}
fun overloading() {
var x = A()
var y = A()
x += y
var z = B()
<!TYPE_MISMATCH!>z += x<!>
}