Process non-aload0 outer access in constructor during inline

#KT-17972 Fixed
This commit is contained in:
Mikhael Bogdanov
2017-05-23 12:05:12 +02:00
committed by Michael Bogdanov
parent 5e265b3d17
commit 3f7bf8467a
13 changed files with 392 additions and 5 deletions
@@ -0,0 +1,33 @@
// FILE: 1.kt
package test
class Test {
val prop: String = "OK"
fun test() =
inlineFun {
noInline {
object {
val inflater = prop
}.inflater
}
}
}
inline fun <T> inlineFun(init: () -> T): T {
return init()
}
fun <T> noInline(init: () -> T): T {
return init()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return Test().test()
}
@@ -0,0 +1,33 @@
// FILE: 1.kt
package test
class Test {
val prop: String = "OK"
fun test() =
inlineFun {
inlineFun2 {
object {
val inflater = prop
}.inflater
}
}
}
inline fun <T> inlineFun(init: () -> T): T {
return init()
}
inline fun <T> inlineFun2(init: () -> T): T {
return init()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return Test().test()
}
@@ -0,0 +1,35 @@
// FILE: 1.kt
package test
class Test {
val prop: String = "OK"
fun test() =
inlineFun {
noInline {
inlineFun {
object {
val inflater = prop
}.inflater
}
}
}
}
inline fun <T> inlineFun(init: () -> T): T {
return init()
}
fun <T> noInline(init: () -> T): T {
return init()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return Test().test()
}
@@ -0,0 +1,37 @@
// FILE: 1.kt
package test
class Test {
val prop: String = "OK"
fun test() =
inlineFun {
noInline {
inlineFun {
noInline {
object {
val inflater = prop
}.inflater
}
}
}
}
}
inline fun <T> inlineFun(init: () -> T): T {
return init()
}
fun <T> noInline(init: () -> T): T {
return init()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return Test().test()
}
@@ -0,0 +1,35 @@
// FILE: 1.kt
package test
class Test {
val prop: String = "OK"
fun test() =
inlineFun {
noInline {
noInline {
object {
val inflater = prop
}.inflater
}
}
}
}
inline fun <T> inlineFun(init: () -> T): T {
return init()
}
fun <T> noInline(init: () -> T): T {
return init()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return Test().test()
}
@@ -0,0 +1,35 @@
// FILE: 1.kt
package test
open class A(val value: String)
class Test {
val prop: String = "OK"
fun test() =
inlineFun {
noInline {
object : A(prop) {
}.value
}
}
}
inline fun <T> inlineFun(init: () -> T): T {
return init()
}
fun <T> noInline(init: () -> T): T {
return init()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return Test().test()
}
@@ -0,0 +1,37 @@
// FILE: 1.kt
package test
open class A(val value: String)
class Test {
val prop: String = "OK"
fun test() =
inlineFun {
noInline {
inlineFun {
object : A(prop) {
}.value
}
}
}
}
inline fun <T> inlineFun(init: () -> T): T {
return init()
}
fun <T> noInline(init: () -> T): T {
return init()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return Test().test()
}
@@ -0,0 +1,39 @@
// FILE: 1.kt
package test
open class A(val value: String)
class Test {
val prop: String = "OK"
fun test() =
inlineFun {
noInline {
inlineFun {
noInline {
object : A(prop) {
}.value
}
}
}
}
}
inline fun <T> inlineFun(init: () -> T): T {
return init()
}
fun <T> noInline(init: () -> T): T {
return init()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return Test().test()
}