From 8e8ecc48adb808d7fa176093f9574af6151ddfc6 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Mon, 25 Apr 2022 14:55:36 +0300 Subject: [PATCH] [IR][tests] Add tests for removal-of-abstract-fun IR linkage case ^KT-50771 --- .../lib1/l1.kt.0 | 5 ++++ .../lib1/l1.kt.1 | 3 +++ .../lib1/module.info | 12 ++++++++++ .../lib2/l2.kt | 7 ++++++ .../lib2/l2.kt.1 | 5 ++++ .../lib2/module.info | 6 +++++ .../main/m.kt | 19 +++++++++++++++ .../main/module.info | 2 ++ .../project.info | 10 ++++++++ .../lib1/l1.kt.0 | 5 ++++ .../lib1/l1.kt.1 | 3 +++ .../lib1/module.info | 12 ++++++++++ .../lib2/l2.kt | 7 ++++++ .../lib2/l2.kt.1 | 5 ++++ .../lib2/module.info | 6 +++++ .../main/m.kt | 19 +++++++++++++++ .../main/module.info | 2 ++ .../project.info | 10 ++++++++ .../lib1/l1.kt.0 | 5 ++++ .../lib1/l1.kt.1 | 3 +++ .../lib1/module.info | 12 ++++++++++ .../lib2/l2.kt | 7 ++++++ .../lib2/l2.kt.1 | 5 ++++ .../lib2/module.info | 6 +++++ .../main/m.kt | 19 +++++++++++++++ .../main/module.info | 2 ++ .../project.info | 10 ++++++++ .../lib1/l1.kt.0 | 5 ++++ .../lib1/l1.kt.1 | 3 +++ .../lib1/module.info | 12 ++++++++++ .../lib2/l2.kt | 7 ++++++ .../lib2/l2.kt.1 | 5 ++++ .../lib2/module.info | 6 +++++ .../main/m.kt | 19 +++++++++++++++ .../main/module.info | 2 ++ .../project.info | 10 ++++++++ .../js/test/JsKLibABITestCaseGenerated.java | 20 ++++++++++++++++ .../blackboxtest/KlibABITestGenerated.java | 24 +++++++++++++++++++ 38 files changed, 320 insertions(+) create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/l1.kt.0 create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/l1.kt.1 create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/module.info create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/l2.kt create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/l2.kt.1 create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/module.info create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/main/m.kt create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/main/module.info create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/project.info create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/l1.kt.0 create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/l1.kt.1 create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/module.info create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/l2.kt create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/l2.kt.1 create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/module.info create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromInterface/main/m.kt create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromInterface/main/module.info create mode 100644 compiler/testData/klibABI/removeAbstractFunctionFromInterface/project.info create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/l1.kt.0 create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/l1.kt.1 create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/module.info create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/l2.kt create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/l2.kt.1 create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/module.info create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/main/m.kt create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/main/module.info create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/project.info create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/l1.kt.0 create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/l1.kt.1 create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/module.info create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/l2.kt create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/l2.kt.1 create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/module.info create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromInterface/main/m.kt create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromInterface/main/module.info create mode 100644 compiler/testData/klibABI/removeAbstractPropertyFromInterface/project.info diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/l1.kt.0 b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/l1.kt.0 new file mode 100644 index 00000000000..041e4d719b2 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/l1.kt.0 @@ -0,0 +1,5 @@ +package lib1 + +abstract class A { + abstract fun foo(): Int +} diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/l1.kt.1 b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/l1.kt.1 new file mode 100644 index 00000000000..643e7128adb --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/l1.kt.1 @@ -0,0 +1,3 @@ +package lib1 + +open class A diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/module.info b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/module.info new file mode 100644 index 00000000000..1b0feb46a14 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib1/module.info @@ -0,0 +1,12 @@ +STEP 0: + dependencies: stdlib + modifications: + U : l1.kt.0 -> l1.kt +STEP 1: + dependencies: stdlib + modifications: + U : l1.kt.1 -> l1.kt +STEP 2: + dependencies: stdlib + modifications: + U : l1.kt.0 -> l1.kt diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/l2.kt b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/l2.kt new file mode 100644 index 00000000000..e4ea1d42149 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/l2.kt @@ -0,0 +1,7 @@ +package lib2 + +import lib1.A + +class B : A() { + override fun foo() = 42 +} diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/l2.kt.1 b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/l2.kt.1 new file mode 100644 index 00000000000..689b57a3e7e --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/l2.kt.1 @@ -0,0 +1,5 @@ +package lib2 + +import lib1.A + +class B : A() diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/module.info b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/module.info new file mode 100644 index 00000000000..52781d50089 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/lib2/module.info @@ -0,0 +1,6 @@ +STEP 0: + dependencies: stdlib, lib1 +STEP 1: + dependencies: stdlib, lib1 + modifications: + U : l2.kt.1 -> l2.kt diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/main/m.kt b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/main/m.kt new file mode 100644 index 00000000000..f7940b21c71 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/main/m.kt @@ -0,0 +1,19 @@ +import lib1.A +import lib2.B + +fun box(): String { + val a: A = B() + + try { + val answer: Int = a.foo() // <-- should throw linkage error here + println(answer) + } catch (e: Throwable) { + if (e.isLinkageError("lib2.B.foo")) return "OK" + } + + return "FAIL" +} + +private fun Throwable.isLinkageError(symbolName: String): Boolean = + this::class.simpleName == "IrLinkageError" + && message == "Abstract function $symbolName is not implemented in non-abstract class ${symbolName.substringBeforeLast(".")}" diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/main/module.info b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/main/module.info new file mode 100644 index 00000000000..c086bdb447b --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/main/module.info @@ -0,0 +1,2 @@ +STEP 0: + dependencies: stdlib, lib1, lib2 diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/project.info b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/project.info new file mode 100644 index 00000000000..01ef0b966c5 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/project.info @@ -0,0 +1,10 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + +STEP 1: + libs: lib1, lib2 + +STEP 2: + libs: lib1 diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/l1.kt.0 b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/l1.kt.0 new file mode 100644 index 00000000000..688079b8143 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/l1.kt.0 @@ -0,0 +1,5 @@ +package lib1 + +interface A { + fun foo(): Int +} diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/l1.kt.1 b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/l1.kt.1 new file mode 100644 index 00000000000..35f41d66f33 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/l1.kt.1 @@ -0,0 +1,3 @@ +package lib1 + +interface A diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/module.info b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/module.info new file mode 100644 index 00000000000..1b0feb46a14 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib1/module.info @@ -0,0 +1,12 @@ +STEP 0: + dependencies: stdlib + modifications: + U : l1.kt.0 -> l1.kt +STEP 1: + dependencies: stdlib + modifications: + U : l1.kt.1 -> l1.kt +STEP 2: + dependencies: stdlib + modifications: + U : l1.kt.0 -> l1.kt diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/l2.kt b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/l2.kt new file mode 100644 index 00000000000..96514a44eef --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/l2.kt @@ -0,0 +1,7 @@ +package lib2 + +import lib1.A + +class B : A { + override fun foo() = 42 +} diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/l2.kt.1 b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/l2.kt.1 new file mode 100644 index 00000000000..bb27e5dfe0e --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/l2.kt.1 @@ -0,0 +1,5 @@ +package lib2 + +import lib1.A + +class B : A diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/module.info b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/module.info new file mode 100644 index 00000000000..52781d50089 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/lib2/module.info @@ -0,0 +1,6 @@ +STEP 0: + dependencies: stdlib, lib1 +STEP 1: + dependencies: stdlib, lib1 + modifications: + U : l2.kt.1 -> l2.kt diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromInterface/main/m.kt b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/main/m.kt new file mode 100644 index 00000000000..f7940b21c71 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/main/m.kt @@ -0,0 +1,19 @@ +import lib1.A +import lib2.B + +fun box(): String { + val a: A = B() + + try { + val answer: Int = a.foo() // <-- should throw linkage error here + println(answer) + } catch (e: Throwable) { + if (e.isLinkageError("lib2.B.foo")) return "OK" + } + + return "FAIL" +} + +private fun Throwable.isLinkageError(symbolName: String): Boolean = + this::class.simpleName == "IrLinkageError" + && message == "Abstract function $symbolName is not implemented in non-abstract class ${symbolName.substringBeforeLast(".")}" diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromInterface/main/module.info b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/main/module.info new file mode 100644 index 00000000000..c086bdb447b --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/main/module.info @@ -0,0 +1,2 @@ +STEP 0: + dependencies: stdlib, lib1, lib2 diff --git a/compiler/testData/klibABI/removeAbstractFunctionFromInterface/project.info b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/project.info new file mode 100644 index 00000000000..01ef0b966c5 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractFunctionFromInterface/project.info @@ -0,0 +1,10 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + +STEP 1: + libs: lib1, lib2 + +STEP 2: + libs: lib1 diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/l1.kt.0 b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/l1.kt.0 new file mode 100644 index 00000000000..ff3abffa1cc --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/l1.kt.0 @@ -0,0 +1,5 @@ +package lib1 + +abstract class A { + abstract val foo: Int +} diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/l1.kt.1 b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/l1.kt.1 new file mode 100644 index 00000000000..643e7128adb --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/l1.kt.1 @@ -0,0 +1,3 @@ +package lib1 + +open class A diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/module.info b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/module.info new file mode 100644 index 00000000000..1b0feb46a14 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib1/module.info @@ -0,0 +1,12 @@ +STEP 0: + dependencies: stdlib + modifications: + U : l1.kt.0 -> l1.kt +STEP 1: + dependencies: stdlib + modifications: + U : l1.kt.1 -> l1.kt +STEP 2: + dependencies: stdlib + modifications: + U : l1.kt.0 -> l1.kt diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/l2.kt b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/l2.kt new file mode 100644 index 00000000000..88215b3d21c --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/l2.kt @@ -0,0 +1,7 @@ +package lib2 + +import lib1.A + +class B : A() { + override val foo = 42 +} diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/l2.kt.1 b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/l2.kt.1 new file mode 100644 index 00000000000..689b57a3e7e --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/l2.kt.1 @@ -0,0 +1,5 @@ +package lib2 + +import lib1.A + +class B : A() diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/module.info b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/module.info new file mode 100644 index 00000000000..52781d50089 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/lib2/module.info @@ -0,0 +1,6 @@ +STEP 0: + dependencies: stdlib, lib1 +STEP 1: + dependencies: stdlib, lib1 + modifications: + U : l2.kt.1 -> l2.kt diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/main/m.kt b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/main/m.kt new file mode 100644 index 00000000000..013ac0cd8f4 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/main/m.kt @@ -0,0 +1,19 @@ +import lib1.A +import lib2.B + +fun box(): String { + val a: A = B() + + try { + val answer: Int = a.foo // <-- should throw linkage error here + println(answer) + } catch (e: Throwable) { + if (e.isLinkageError("lib2.B.")) return "OK" + } + + return "FAIL" +} + +private fun Throwable.isLinkageError(symbolName: String): Boolean = + this::class.simpleName == "IrLinkageError" + && message == "Abstract property accessor $symbolName is not implemented in non-abstract class ${symbolName.substringBeforeLast(".")}" diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/main/module.info b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/main/module.info new file mode 100644 index 00000000000..c086bdb447b --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/main/module.info @@ -0,0 +1,2 @@ +STEP 0: + dependencies: stdlib, lib1, lib2 diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/project.info b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/project.info new file mode 100644 index 00000000000..01ef0b966c5 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/project.info @@ -0,0 +1,10 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + +STEP 1: + libs: lib1, lib2 + +STEP 2: + libs: lib1 diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/l1.kt.0 b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/l1.kt.0 new file mode 100644 index 00000000000..35d826f18e9 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/l1.kt.0 @@ -0,0 +1,5 @@ +package lib1 + +interface A { + val foo: Int +} diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/l1.kt.1 b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/l1.kt.1 new file mode 100644 index 00000000000..35f41d66f33 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/l1.kt.1 @@ -0,0 +1,3 @@ +package lib1 + +interface A diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/module.info b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/module.info new file mode 100644 index 00000000000..1b0feb46a14 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib1/module.info @@ -0,0 +1,12 @@ +STEP 0: + dependencies: stdlib + modifications: + U : l1.kt.0 -> l1.kt +STEP 1: + dependencies: stdlib + modifications: + U : l1.kt.1 -> l1.kt +STEP 2: + dependencies: stdlib + modifications: + U : l1.kt.0 -> l1.kt diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/l2.kt b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/l2.kt new file mode 100644 index 00000000000..d57ed28e691 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/l2.kt @@ -0,0 +1,7 @@ +package lib2 + +import lib1.A + +class B : A { + override val foo = 42 +} diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/l2.kt.1 b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/l2.kt.1 new file mode 100644 index 00000000000..bb27e5dfe0e --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/l2.kt.1 @@ -0,0 +1,5 @@ +package lib2 + +import lib1.A + +class B : A diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/module.info b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/module.info new file mode 100644 index 00000000000..52781d50089 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/lib2/module.info @@ -0,0 +1,6 @@ +STEP 0: + dependencies: stdlib, lib1 +STEP 1: + dependencies: stdlib, lib1 + modifications: + U : l2.kt.1 -> l2.kt diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromInterface/main/m.kt b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/main/m.kt new file mode 100644 index 00000000000..013ac0cd8f4 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/main/m.kt @@ -0,0 +1,19 @@ +import lib1.A +import lib2.B + +fun box(): String { + val a: A = B() + + try { + val answer: Int = a.foo // <-- should throw linkage error here + println(answer) + } catch (e: Throwable) { + if (e.isLinkageError("lib2.B.")) return "OK" + } + + return "FAIL" +} + +private fun Throwable.isLinkageError(symbolName: String): Boolean = + this::class.simpleName == "IrLinkageError" + && message == "Abstract property accessor $symbolName is not implemented in non-abstract class ${symbolName.substringBeforeLast(".")}" diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromInterface/main/module.info b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/main/module.info new file mode 100644 index 00000000000..c086bdb447b --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/main/module.info @@ -0,0 +1,2 @@ +STEP 0: + dependencies: stdlib, lib1, lib2 diff --git a/compiler/testData/klibABI/removeAbstractPropertyFromInterface/project.info b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/project.info new file mode 100644 index 00000000000..01ef0b966c5 --- /dev/null +++ b/compiler/testData/klibABI/removeAbstractPropertyFromInterface/project.info @@ -0,0 +1,10 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + +STEP 1: + libs: lib1, lib2 + +STEP 2: + libs: lib1 diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsKLibABITestCaseGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsKLibABITestCaseGenerated.java index c5fbeed3d28..f9b97233aa7 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsKLibABITestCaseGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsKLibABITestCaseGenerated.java @@ -30,6 +30,26 @@ public class JsKLibABITestCaseGenerated extends AbstractJsKLibABITestCase { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/klibABI"), Pattern.compile("^([^_](.+))$"), null, TargetBackend.JS_IR, false); } + @TestMetadata("removeAbstractFunctionFromAbstractClass") + public void testRemoveAbstractFunctionFromAbstractClass() throws Exception { + runTest("compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/"); + } + + @TestMetadata("removeAbstractFunctionFromInterface") + public void testRemoveAbstractFunctionFromInterface() throws Exception { + runTest("compiler/testData/klibABI/removeAbstractFunctionFromInterface/"); + } + + @TestMetadata("removeAbstractPropertyFromAbstractClass") + public void testRemoveAbstractPropertyFromAbstractClass() throws Exception { + runTest("compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/"); + } + + @TestMetadata("removeAbstractPropertyFromInterface") + public void testRemoveAbstractPropertyFromInterface() throws Exception { + runTest("compiler/testData/klibABI/removeAbstractPropertyFromInterface/"); + } + @TestMetadata("removeClassAsParameterType") public void testRemoveClassAsParameterType() throws Exception { runTest("compiler/testData/klibABI/removeClassAsParameterType/"); diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/KlibABITestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/KlibABITestGenerated.java index 920a90ef64b..70f0470a63f 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/KlibABITestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/KlibABITestGenerated.java @@ -24,6 +24,30 @@ public class KlibABITestGenerated extends AbstractNativeKlibABITest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/klibABI"), Pattern.compile("^([^_](.+))$"), null, false); } + @Test + @TestMetadata("removeAbstractFunctionFromAbstractClass") + public void testRemoveAbstractFunctionFromAbstractClass() throws Exception { + runTest("compiler/testData/klibABI/removeAbstractFunctionFromAbstractClass/"); + } + + @Test + @TestMetadata("removeAbstractFunctionFromInterface") + public void testRemoveAbstractFunctionFromInterface() throws Exception { + runTest("compiler/testData/klibABI/removeAbstractFunctionFromInterface/"); + } + + @Test + @TestMetadata("removeAbstractPropertyFromAbstractClass") + public void testRemoveAbstractPropertyFromAbstractClass() throws Exception { + runTest("compiler/testData/klibABI/removeAbstractPropertyFromAbstractClass/"); + } + + @Test + @TestMetadata("removeAbstractPropertyFromInterface") + public void testRemoveAbstractPropertyFromInterface() throws Exception { + runTest("compiler/testData/klibABI/removeAbstractPropertyFromInterface/"); + } + @Test @TestMetadata("removeClassAsParameterType") public void testRemoveClassAsParameterType() throws Exception {