fun testFun1(str: String): String { val capture = str class A { val x = capture } return A().x } fun testFun2(str: String): String { class A { val x = str } fun bar() = A() return bar().x } class TestClass(val str: String) { var xx: String? = null init { class A { val x = str } xx = A().x } } fun testFun3(str: String): String = TestClass(str).xx!! fun String.testFun4(): String { class A { val x = this@testFun4 } return A().x } fun box(): String { return when { testFun1("test1") != "test1" -> "Fail #1 (local class with capture)" testFun2("test2") != "test2" -> "Fail #2 (local class with capture ctor in another context)" testFun3("test3") != "test3" -> "Fail #3 (local class with capture ctor in init{ ... })" "test4".testFun4() != "test4" -> "Fail #4 (local class with extension receiver)" else -> "OK" } }