new tests
diff --git a/compiler/testData/klibABI/removeClassAsReturnType/lib2/l2.kt b/compiler/testData/klibABI/removeClassAsReturnType/lib2/l2.kt index 2544d4d..eba918f 100644 --- a/compiler/testData/klibABI/removeClassAsReturnType/lib2/l2.kt +++ b/compiler/testData/klibABI/removeClassAsReturnType/lib2/l2.kt
@@ -19,3 +19,45 @@ val expP2: E = E() val barP2: String = expP2.ep } + +fun bar() { + fun foo(): E = E() + foo() +} + +fun baz() { + fun qux() { + fun foo(): E = E() + foo() + } + qux() +} + +fun quux() { + class Local { + fun corge() { + fun foo(): E = E() + foo() + } + } + Local().corge() +} + +fun grault() { + object { + fun garply() { + fun foo(): E = E() + foo() + } + }.garply() +} + +fun waldo() { + val fred = object { + fun garply() { + fun foo(): E = E() + foo() + } + } + fred.garply() +}
diff --git a/compiler/testData/klibABI/removeClassAsReturnType/main/m.kt b/compiler/testData/klibABI/removeClassAsReturnType/main/m.kt index 0a7ea7a..f3ad794 100644 --- a/compiler/testData/klibABI/removeClassAsReturnType/main/m.kt +++ b/compiler/testData/klibABI/removeClassAsReturnType/main/m.kt
@@ -30,7 +30,52 @@ } } -fun box(): String = checkResults(test1(D()), test2(D()), test3(D()), test4(D()), test5()) +fun test6(): String { + return try { + bar() + return "FAIL6" + } catch (e: Throwable) { + e.checkLinkageError("function foo declared in function bar can not be called") + } +} + +fun test7(): String { + return try { + baz() + return "FAIL7" + } catch (e: Throwable) { + e.checkLinkageError("function foo declared in function qux declared in function baz can not be called") + } +} + +fun test8(): String { + return try { + quux() + return "FAIL8" + } catch (e: Throwable) { + e.checkLinkageError("function foo declared in function quux\$Local.corge can not be called") + } +} + +fun test9(): String { + return try { + grault() + return "FAIL9" + } catch (e: Throwable) { + e.checkLinkageError("function foo declared in function grault\$1.garply") + } +} + +fun test10(): String { + return try { + waldo() + return "FAIL10" + } catch (e: Throwable) { + e.checkLinkageError("function foo declared in function waldo\$fred\$1.garply") + } +} + +fun box(): String = checkResults(test1(D()), test2(D()), test3(D()), test4(D()), test5(), test6(), test7(), test8(), test9(), test10()) private fun Throwable.checkLinkageError(prefix: String): String = if (this::class.simpleName == "IrLinkageError" && message?.startsWith("$prefix because it uses unlinked symbols") == true)
diff --git a/compiler/testData/klibABI/removeClassAsVariableType/lib2/l2.kt b/compiler/testData/klibABI/removeClassAsVariableType/lib2/l2.kt index 19bd767..0c52bc7 100644 --- a/compiler/testData/klibABI/removeClassAsVariableType/lib2/l2.kt +++ b/compiler/testData/klibABI/removeClassAsVariableType/lib2/l2.kt
@@ -2,3 +2,40 @@ var foo: Foo? = null check(foo == null) } + +fun baz() { + fun qux() { + var foo: Foo? = null + check(foo == null) + } + qux() +} + +fun quux() { + class Local { + fun corge() { + var foo: Foo? = null + check(foo == null) + } + } + Local().corge() +} + +fun grault() { + object { + fun garply() { + var foo: Foo? = null + check(foo == null) + } + }.garply() +} + +fun waldo() { + val fred = object { + fun garply() { + var foo: Foo? = null + check(foo == null) + } + } + fred.garply() +}
diff --git a/compiler/testData/klibABI/removeClassAsVariableType/main/m.kt b/compiler/testData/klibABI/removeClassAsVariableType/main/m.kt index d319ea2..91ebd35 100644 --- a/compiler/testData/klibABI/removeClassAsVariableType/main/m.kt +++ b/compiler/testData/klibABI/removeClassAsVariableType/main/m.kt
@@ -1,14 +1,58 @@ -fun box(): String { +fun test1(): String { return try { bar() - return "FAIL" + return "FAIL1" } catch (e: Throwable) { e.checkLinkageError("var foo declared in function bar can not be read") } } +fun test2(): String { + return try { + baz() + return "FAIL2" + } catch (e: Throwable) { + e.checkLinkageError("var foo declared in function qux declared in function baz can not be read") + } +} + +fun test3(): String { + return try { + quux() + return "FAIL3" + } catch (e: Throwable) { + e.checkLinkageError("var foo declared in function quux\$Local.corge can not be read") + } +} + +fun test4(): String { + return try { + grault() + return "FAIL4" + } catch (e: Throwable) { + e.checkLinkageError("var foo declared in function grault\$1.garply can not be read") + } +} + +fun test5(): String { + return try { + waldo() + return "FAIL5" + } catch (e: Throwable) { + e.checkLinkageError("var foo declared in function waldo\$fred\$1.garply") + } +} + +fun box() = checkResults(test1(), test2(), test3(), test4(), test5()) + private fun Throwable.checkLinkageError(prefix: String): String = if (this::class.simpleName == "IrLinkageError" && message?.startsWith("$prefix because it uses unlinked symbols") == true) "OK" else message!! + +private fun checkResults(vararg results: String): String = when { + results.isEmpty() -> "no results to check" + results.all { it == "OK" } -> "OK" + else -> results.joinToString("\n") +}