Captured value initialization is no more allowed #KT-10445 Fixed
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user