Record COMPILE_TIME_INITIALIZER for all final variables

This commit is contained in:
Natalia Ukhorskaya
2014-01-17 13:10:55 +04:00
parent 2ddda59465
commit 97da2def08
23 changed files with 611 additions and 52 deletions
@@ -1,3 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
val intMaxValue: Int = 0x7fffffff
val intMinValue: Int = 1 shl 31
@@ -18,4 +20,48 @@ val i15: Int = <!INTEGER_OVERFLOW!>intMinValue / -1<!>
val l20: Int = <!INTEGER_OVERFLOW!>30 * 24 * 60 * 60 * 1000<!>
val l21: Int = intMinValue - intMinValue
val l22: Int = <!INTEGER_OVERFLOW!>intMinValue + <!INTEGER_OVERFLOW!>-intMinValue<!><!>
val l23: Int = intMaxValue + <!INTEGER_OVERFLOW!>-intMinValue<!>
val l23: Int = intMaxValue + <!INTEGER_OVERFLOW!>-intMinValue<!>
fun foo() {
val a3: Int = <!INTEGER_OVERFLOW!><!INTEGER_OVERFLOW!>intMaxValue + 1<!> - 10<!>
val a4: Int = <!INTEGER_OVERFLOW!>intMaxValue + 1<!> + 10
val i2: Int = <!INTEGER_OVERFLOW!>intMaxValue - 1 + 2<!>
val i3: Int = <!INTEGER_OVERFLOW!>intMaxValue - intMinValue<!>
val i4: Int = <!INTEGER_OVERFLOW!>-intMinValue<!>
val i5: Int = <!INTEGER_OVERFLOW!>intMinValue - 1<!>
val i6: Int = <!INTEGER_OVERFLOW!>intMinValue - intMaxValue<!>
val i7: Int = intMinValue + intMaxValue
val i8: Int = -intMaxValue
val i10: Int = <!INTEGER_OVERFLOW!>intMinValue * -1<!>
val i11: Int = <!INTEGER_OVERFLOW!>intMinValue * 2<!>
val i12: Int = <!INTEGER_OVERFLOW!>intMaxValue * -2<!>
val i13: Int = intMaxValue * -1
val i15: Int = <!INTEGER_OVERFLOW!>intMinValue / -1<!>
val l20: Int = <!INTEGER_OVERFLOW!>30 * 24 * 60 * 60 * 1000<!>
val l21: Int = intMinValue - intMinValue
val l22: Int = <!INTEGER_OVERFLOW!>intMinValue + <!INTEGER_OVERFLOW!>-intMinValue<!><!>
val l23: Int = intMaxValue + <!INTEGER_OVERFLOW!>-intMinValue<!>
}
class A {
fun foo() {
val a3: Int = <!INTEGER_OVERFLOW!><!INTEGER_OVERFLOW!>intMaxValue + 1<!> - 10<!>
val a4: Int = <!INTEGER_OVERFLOW!>intMaxValue + 1<!> + 10
val i2: Int = <!INTEGER_OVERFLOW!>intMaxValue - 1 + 2<!>
val i3: Int = <!INTEGER_OVERFLOW!>intMaxValue - intMinValue<!>
val i4: Int = <!INTEGER_OVERFLOW!>-intMinValue<!>
val i5: Int = <!INTEGER_OVERFLOW!>intMinValue - 1<!>
val i6: Int = <!INTEGER_OVERFLOW!>intMinValue - intMaxValue<!>
val i7: Int = intMinValue + intMaxValue
val i8: Int = -intMaxValue
val i10: Int = <!INTEGER_OVERFLOW!>intMinValue * -1<!>
val i11: Int = <!INTEGER_OVERFLOW!>intMinValue * 2<!>
val i12: Int = <!INTEGER_OVERFLOW!>intMaxValue * -2<!>
val i13: Int = intMaxValue * -1
val i15: Int = <!INTEGER_OVERFLOW!>intMinValue / -1<!>
val l20: Int = <!INTEGER_OVERFLOW!>30 * 24 * 60 * 60 * 1000<!>
val l21: Int = intMinValue - intMinValue
val l22: Int = <!INTEGER_OVERFLOW!>intMinValue + <!INTEGER_OVERFLOW!>-intMinValue<!><!>
val l23: Int = intMaxValue + <!INTEGER_OVERFLOW!>-intMinValue<!>
}
}
@@ -1,3 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
val longMaxValue: Long = 0x7fffffffffffffff
val longMinValue: Long = -longMaxValue - 1
val intMaxValue: Int = 0x7fffffff
@@ -20,4 +22,44 @@ val l13: Long = <!INTEGER_OVERFLOW!>longMinValue * -1<!>
val l14: Long = <!INTEGER_OVERFLOW!>longMinValue * 2<!>
val l15: Long = <!INTEGER_OVERFLOW!>longMaxValue * -2<!>
val l16: Long = intMinValue.toLong() * -1
val l19: Long = <!INTEGER_OVERFLOW!>longMinValue / -1<!>
val l19: Long = <!INTEGER_OVERFLOW!>longMinValue / -1<!>
fun foo() {
val l1: Long = <!INTEGER_OVERFLOW!>longMaxValue + 1<!>
val l2: Long = <!INTEGER_OVERFLOW!>longMaxValue - 1 + 2<!>
val l3: Long = <!INTEGER_OVERFLOW!>longMaxValue - longMinValue<!>
val l4: Long = <!INTEGER_OVERFLOW!>-longMinValue<!>
val l5: Long = <!INTEGER_OVERFLOW!>longMinValue - 1<!>
val l6: Long = <!INTEGER_OVERFLOW!>longMinValue - longMaxValue<!>
val l7: Long = longMinValue + longMaxValue
val l8: Long = -longMaxValue
val l10: Long = -intMinValue.toLong()
val l11: Long = -1 + intMinValue.toLong()
val l12: Long = <!INTEGER_OVERFLOW!>longMinValue * intMinValue<!>
val l13: Long = <!INTEGER_OVERFLOW!>longMinValue * -1<!>
val l14: Long = <!INTEGER_OVERFLOW!>longMinValue * 2<!>
val l15: Long = <!INTEGER_OVERFLOW!>longMaxValue * -2<!>
val l16: Long = intMinValue.toLong() * -1
val l19: Long = <!INTEGER_OVERFLOW!>longMinValue / -1<!>
}
class A {
fun foo() {
val l1: Long = <!INTEGER_OVERFLOW!>longMaxValue + 1<!>
val l2: Long = <!INTEGER_OVERFLOW!>longMaxValue - 1 + 2<!>
val l3: Long = <!INTEGER_OVERFLOW!>longMaxValue - longMinValue<!>
val l4: Long = <!INTEGER_OVERFLOW!>-longMinValue<!>
val l5: Long = <!INTEGER_OVERFLOW!>longMinValue - 1<!>
val l6: Long = <!INTEGER_OVERFLOW!>longMinValue - longMaxValue<!>
val l7: Long = longMinValue + longMaxValue
val l8: Long = -longMaxValue
val l10: Long = -intMinValue.toLong()
val l11: Long = -1 + intMinValue.toLong()
val l12: Long = <!INTEGER_OVERFLOW!>longMinValue * intMinValue<!>
val l13: Long = <!INTEGER_OVERFLOW!>longMinValue * -1<!>
val l14: Long = <!INTEGER_OVERFLOW!>longMinValue * 2<!>
val l15: Long = <!INTEGER_OVERFLOW!>longMaxValue * -2<!>
val l16: Long = intMinValue.toLong() * -1
val l19: Long = <!INTEGER_OVERFLOW!>longMinValue / -1<!>
}
}
@@ -0,0 +1,8 @@
// FILE: a.kt
package example.ns
val y: Any? = 2
// FILE: b.kt
package example
val x: Int = if (ns.y is Int) <!DEBUG_INFO_AUTOCAST!>ns.y<!> else 2
@@ -0,0 +1,49 @@
package test
// val prop1: 1.toInt()
val prop1 = A.a
// val prop2: 2.toInt()
val prop2 = A.a + 1
class A {
// val prop3: 1.toInt()
val prop3 = A.a
// val prop4: 2.toInt()
val prop4 = A.a + 1
class object {
val a = 1
}
}
fun foo() {
// val prop5: 1.toInt()
val prop5 = A.a
// val prop6: 2.toInt()
val prop6 = A.a + 1
val b = {
// val prop11: 1.toInt()
val prop11 = A.a
// val prop12: 2.toInt()
val prop12 = A.a + 1
}
val c = object: Foo {
override fun f() {
// val prop9: 1.toInt()
val prop9 = A.a
// val prop10: 2.toInt()
val prop10 = A.a + 1
}
}
}
trait Foo {
fun f()
}
@@ -0,0 +1,55 @@
package test
// val prop1: 1.toInt()
val prop1 = A().a
// val prop2: 2.toInt()
val prop2 = A().a + 1
class A() {
val a = 1
// val prop3: 1.toInt()
val prop3 = a
// val prop4: 2.toInt()
val prop4 = a + 1
fun foo() {
// val prop5: 1.toInt()
val prop5 = A().a
// val prop6: 2.toInt()
val prop6 = A().a + 1
val b = {
// val prop11: 1.toInt()
val prop11 = A().a
// val prop12: 2.toInt()
val prop12 = A().a + 1
}
val c = object: Foo {
override fun f() {
// val prop9: 1.toInt()
val prop9 = A().a
// val prop10: 2.toInt()
val prop10 = A().a + 1
}
}
}
}
fun foo() {
// val prop7: 1.toInt()
val prop7 = A().a
// val prop8: 2.toInt()
val prop8 = A().a + 1
}
trait Foo {
fun f()
}
@@ -0,0 +1,53 @@
package test
class A() {
fun foo() {
val a = 1
// val prop5: 1.toInt()
val prop5 = a
// val prop6: 2.toInt()
val prop6 = a + 1
fun local() {
// val prop1: 1.toInt()
val prop1 = a
// val prop2: 2.toInt()
val prop2 = a + 1
}
val b = {
// val prop3: 1.toInt()
val prop3 = a
// val prop4: 2.toInt()
val prop4 = a + 1
}
val c = object: Foo {
override fun f() {
// val prop9: 1.toInt()
val prop9 = a
// val prop10: 2.toInt()
val prop10 = a + 1
}
}
}
}
fun foo() {
val a = 1
// val prop7: 1.toInt()
val prop7 = a
// val prop8: 2.toInt()
val prop8 = a + 1
}
trait Foo {
fun f()
}
@@ -0,0 +1,53 @@
package test
class A() {
fun foo() {
var a = 1
// val prop5: null
val prop5 = a
// val prop6: null
val prop6 = a + 1
fun local() {
// val prop1: null
val prop1 = a
// val prop2: null
val prop2 = a + 1
}
val b = {
// val prop3: null
val prop3 = a
// val prop4: null
val prop4 = a + 1
}
val c = object: Foo {
override fun f() {
// val prop9: null
val prop9 = a
// val prop10: null
val prop10 = a + 1
}
}
}
}
fun foo() {
var a = 1
// val prop7: null
val prop7 = a
// val prop8: null
val prop8 = a + 1
}
trait Foo {
fun f()
}
@@ -0,0 +1,56 @@
package test
// val prop1: null
val prop1 = A().a
// val prop2: null
val prop2 = A().a + 1
class A() {
var a = 1
// val prop3: null
val prop3 = a
// val prop4: null
val prop4 = a + 1
fun foo() {
// val prop5: null
val prop5 = A().a
// val prop6: null
val prop6 = A().a + 1
val b = {
// val prop11: null
val prop11 = A().a
// val prop12: null
val prop12 = A().a + 1
}
val c = object: Foo {
override fun f() {
// val prop9: null
val prop9 = A().a
// val prop10: null
val prop10 = A().a + 1
}
}
}
}
fun foo() {
// val prop7: null
val prop7 = A().a
// val prop8: null
val prop8 = A().a + 1
}
trait Foo {
fun f()
}
@@ -0,0 +1,47 @@
package test
val a = 1
// val prop1: 1.toInt()
val prop1 = a
// val prop2: 2.toInt()
val prop2 = a + 1
class A {
// val prop3: 1.toInt()
val prop3 = a
// val prop4: 2.toInt()
val prop4 = a + 1
val b = {
// val prop11: 1.toInt()
val prop11 = a
// val prop12: 2.toInt()
val prop12 = a + 1
}
val c = object: Foo {
override fun f() {
// val prop9: 1.toInt()
val prop9 = a
// val prop10: 2.toInt()
val prop10 = a + 1
}
}
}
fun foo() {
// val prop5: 1.toInt()
val prop5 = a
// val prop6: 2.toInt()
val prop6 = a + 1
}
trait Foo {
fun f()
}
@@ -0,0 +1,47 @@
package test
var a = 1
// val prop1: null
val prop1 = a
// val prop2: null
val prop2 = a + 1
class A {
// val prop3: null
val prop3 = a
// val prop4: null
val prop4 = a + 1
val b = {
// val prop11: null
val prop11 = a
// val prop12: null
val prop12 = a + 1
}
val c = object: Foo {
override fun f() {
// val prop9: null
val prop9 = a
// val prop10: null
val prop10 = a + 1
}
}
}
fun foo() {
// val prop5: null
val prop5 = a
// val prop6: null
val prop6 = a + 1
}
trait Foo {
fun f()
}