Captured value initialization is no more allowed #KT-10445 Fixed

This commit is contained in:
Mikhail Glukhikh
2016-03-21 13:26:53 +03:00
parent e8b665f600
commit bc4ec97043
14 changed files with 188 additions and 19 deletions
@@ -0,0 +1,77 @@
// !DIAGNOSTICS: -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE
fun ignoreIt(<!UNUSED_PARAMETER!>f<!>: () -> Unit) {}
fun exec(f: () -> Unit) = f()
fun foo() {
var x: Int
ignoreIt() {
// Ok
x = 42
}
// Error!
<!UNINITIALIZED_VARIABLE!>x<!>.hashCode()
}
fun bar() {
val x: Int
exec {
<!CAPTURED_VAL_INITIALIZATION!>x<!> = 13
}
}
fun bar2() {
val x: Int
fun foo() {
<!CAPTURED_VAL_INITIALIZATION!>x<!> = 3
}
foo()
}
class My(val cond: Boolean) {
val y: Int
init {
val x: Int
if (cond) {
exec {
}
x = 1
}
else {
x = 2
}
y = x
}
constructor(): this(false) {
val x: Int
x = 2
exec {
x.hashCode()
}
}
}
class Your {
val y = if (true) {
val xx: Int
exec {
<!CAPTURED_VAL_INITIALIZATION!>xx<!> = 42
}
24
}
else 0
}
val z = if (true) {
val xx: Int
exec {
<!CAPTURED_VAL_INITIALIZATION!>xx<!> = 24
}
42
}
else 0
@@ -0,0 +1,26 @@
package
public val z: kotlin.Int
public fun bar(): kotlin.Unit
public fun bar2(): kotlin.Unit
public fun exec(/*0*/ f: () -> kotlin.Unit): kotlin.Unit
public fun foo(): kotlin.Unit
public fun ignoreIt(/*0*/ f: () -> kotlin.Unit): kotlin.Unit
public final class My {
public constructor My()
public constructor My(/*0*/ cond: kotlin.Boolean)
public final val cond: kotlin.Boolean
public final val y: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Your {
public constructor Your()
public final val y: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}