From ce04a24b265e7ecf708a442c0236cb46ecccd342 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Wed, 8 Jun 2022 23:07:51 +0300 Subject: [PATCH] [IR][tests] Removal of class used as variable type and constructor call --- .../klibABI/removeClassAsConstructorCall/lib1/l1.kt | 1 + .../removeClassAsConstructorCall/lib1/l1.kt.1 | 1 + .../removeClassAsConstructorCall/lib1/module.info | 6 ++++++ .../klibABI/removeClassAsConstructorCall/lib2/l2.kt | 3 +++ .../removeClassAsConstructorCall/lib2/module.info | 2 ++ .../klibABI/removeClassAsConstructorCall/main/m.kt | 13 +++++++++++++ .../removeClassAsConstructorCall/main/module.info | 2 ++ .../removeClassAsConstructorCall/project.info | 7 +++++++ .../klibABI/removeClassAsVariableType/lib1/l1.kt | 1 + .../klibABI/removeClassAsVariableType/lib1/l1.kt.1 | 1 + .../removeClassAsVariableType/lib1/module.info | 6 ++++++ .../klibABI/removeClassAsVariableType/lib2/l2.kt | 4 ++++ .../removeClassAsVariableType/lib2/module.info | 2 ++ .../klibABI/removeClassAsVariableType/main/m.kt | 13 +++++++++++++ .../removeClassAsVariableType/main/module.info | 2 ++ .../klibABI/removeClassAsVariableType/project.info | 7 +++++++ .../kotlin/js/test/JsKLibABITestCaseGenerated.java | 10 ++++++++++ .../konan/blackboxtest/KlibABITestGenerated.java | 12 ++++++++++++ 18 files changed, 93 insertions(+) create mode 100644 compiler/testData/klibABI/removeClassAsConstructorCall/lib1/l1.kt create mode 100644 compiler/testData/klibABI/removeClassAsConstructorCall/lib1/l1.kt.1 create mode 100644 compiler/testData/klibABI/removeClassAsConstructorCall/lib1/module.info create mode 100644 compiler/testData/klibABI/removeClassAsConstructorCall/lib2/l2.kt create mode 100644 compiler/testData/klibABI/removeClassAsConstructorCall/lib2/module.info create mode 100644 compiler/testData/klibABI/removeClassAsConstructorCall/main/m.kt create mode 100644 compiler/testData/klibABI/removeClassAsConstructorCall/main/module.info create mode 100644 compiler/testData/klibABI/removeClassAsConstructorCall/project.info create mode 100644 compiler/testData/klibABI/removeClassAsVariableType/lib1/l1.kt create mode 100644 compiler/testData/klibABI/removeClassAsVariableType/lib1/l1.kt.1 create mode 100644 compiler/testData/klibABI/removeClassAsVariableType/lib1/module.info create mode 100644 compiler/testData/klibABI/removeClassAsVariableType/lib2/l2.kt create mode 100644 compiler/testData/klibABI/removeClassAsVariableType/lib2/module.info create mode 100644 compiler/testData/klibABI/removeClassAsVariableType/main/m.kt create mode 100644 compiler/testData/klibABI/removeClassAsVariableType/main/module.info create mode 100644 compiler/testData/klibABI/removeClassAsVariableType/project.info diff --git a/compiler/testData/klibABI/removeClassAsConstructorCall/lib1/l1.kt b/compiler/testData/klibABI/removeClassAsConstructorCall/lib1/l1.kt new file mode 100644 index 00000000000..c389887ee5a --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsConstructorCall/lib1/l1.kt @@ -0,0 +1 @@ +class Foo diff --git a/compiler/testData/klibABI/removeClassAsConstructorCall/lib1/l1.kt.1 b/compiler/testData/klibABI/removeClassAsConstructorCall/lib1/l1.kt.1 new file mode 100644 index 00000000000..d0c7511327f --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsConstructorCall/lib1/l1.kt.1 @@ -0,0 +1 @@ +//class Foo diff --git a/compiler/testData/klibABI/removeClassAsConstructorCall/lib1/module.info b/compiler/testData/klibABI/removeClassAsConstructorCall/lib1/module.info new file mode 100644 index 00000000000..99edefccd79 --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsConstructorCall/lib1/module.info @@ -0,0 +1,6 @@ +STEP 0: + dependencies: stdlib +STEP 1: + dependencies: stdlib + modifications: + U : l1.kt.1 -> l1.kt diff --git a/compiler/testData/klibABI/removeClassAsConstructorCall/lib2/l2.kt b/compiler/testData/klibABI/removeClassAsConstructorCall/lib2/l2.kt new file mode 100644 index 00000000000..5f996387a4b --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsConstructorCall/lib2/l2.kt @@ -0,0 +1,3 @@ +fun bar() { + check(Foo().toString() != "Bar") +} diff --git a/compiler/testData/klibABI/removeClassAsConstructorCall/lib2/module.info b/compiler/testData/klibABI/removeClassAsConstructorCall/lib2/module.info new file mode 100644 index 00000000000..391aab979a6 --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsConstructorCall/lib2/module.info @@ -0,0 +1,2 @@ +STEP 0: + dependencies: stdlib, lib1 \ No newline at end of file diff --git a/compiler/testData/klibABI/removeClassAsConstructorCall/main/m.kt b/compiler/testData/klibABI/removeClassAsConstructorCall/main/m.kt new file mode 100644 index 00000000000..36185944ec4 --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsConstructorCall/main/m.kt @@ -0,0 +1,13 @@ +fun box(): String { + try { + bar() + return "FAIL1" + } catch (e: Throwable) { + if (!e.isLinkageError("/Foo.")) return "FAIL2" + } + + return "OK" +} + +private fun Throwable.isLinkageError(symbolName: String): Boolean = + this::class.simpleName == "IrLinkageError" && message?.startsWith("Unlinked IR symbol $symbolName|") == true diff --git a/compiler/testData/klibABI/removeClassAsConstructorCall/main/module.info b/compiler/testData/klibABI/removeClassAsConstructorCall/main/module.info new file mode 100644 index 00000000000..62f7f4fab07 --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsConstructorCall/main/module.info @@ -0,0 +1,2 @@ +STEP 0: + dependencies: stdlib, lib1, lib2 \ No newline at end of file diff --git a/compiler/testData/klibABI/removeClassAsConstructorCall/project.info b/compiler/testData/klibABI/removeClassAsConstructorCall/project.info new file mode 100644 index 00000000000..2147306d715 --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsConstructorCall/project.info @@ -0,0 +1,7 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + +STEP 1: + libs: lib1 \ No newline at end of file diff --git a/compiler/testData/klibABI/removeClassAsVariableType/lib1/l1.kt b/compiler/testData/klibABI/removeClassAsVariableType/lib1/l1.kt new file mode 100644 index 00000000000..c389887ee5a --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsVariableType/lib1/l1.kt @@ -0,0 +1 @@ +class Foo diff --git a/compiler/testData/klibABI/removeClassAsVariableType/lib1/l1.kt.1 b/compiler/testData/klibABI/removeClassAsVariableType/lib1/l1.kt.1 new file mode 100644 index 00000000000..d0c7511327f --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsVariableType/lib1/l1.kt.1 @@ -0,0 +1 @@ +//class Foo diff --git a/compiler/testData/klibABI/removeClassAsVariableType/lib1/module.info b/compiler/testData/klibABI/removeClassAsVariableType/lib1/module.info new file mode 100644 index 00000000000..99edefccd79 --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsVariableType/lib1/module.info @@ -0,0 +1,6 @@ +STEP 0: + dependencies: stdlib +STEP 1: + dependencies: stdlib + modifications: + U : l1.kt.1 -> l1.kt diff --git a/compiler/testData/klibABI/removeClassAsVariableType/lib2/l2.kt b/compiler/testData/klibABI/removeClassAsVariableType/lib2/l2.kt new file mode 100644 index 00000000000..19bd767ea5d --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsVariableType/lib2/l2.kt @@ -0,0 +1,4 @@ +fun bar() { + var foo: Foo? = null + check(foo == null) +} diff --git a/compiler/testData/klibABI/removeClassAsVariableType/lib2/module.info b/compiler/testData/klibABI/removeClassAsVariableType/lib2/module.info new file mode 100644 index 00000000000..391aab979a6 --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsVariableType/lib2/module.info @@ -0,0 +1,2 @@ +STEP 0: + dependencies: stdlib, lib1 \ No newline at end of file diff --git a/compiler/testData/klibABI/removeClassAsVariableType/main/m.kt b/compiler/testData/klibABI/removeClassAsVariableType/main/m.kt new file mode 100644 index 00000000000..67ba5f6d5db --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsVariableType/main/m.kt @@ -0,0 +1,13 @@ +fun box(): String { + try { + bar() + return "FAIL1" + } catch (e: Throwable) { + if (!e.isLinkageError()) return "FAIL2" + } + + return "OK" +} + +private fun Throwable.isLinkageError(): Boolean = + this::class.simpleName == "IrLinkageError" && message == "Unlinked type of IR expression" diff --git a/compiler/testData/klibABI/removeClassAsVariableType/main/module.info b/compiler/testData/klibABI/removeClassAsVariableType/main/module.info new file mode 100644 index 00000000000..62f7f4fab07 --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsVariableType/main/module.info @@ -0,0 +1,2 @@ +STEP 0: + dependencies: stdlib, lib1, lib2 \ No newline at end of file diff --git a/compiler/testData/klibABI/removeClassAsVariableType/project.info b/compiler/testData/klibABI/removeClassAsVariableType/project.info new file mode 100644 index 00000000000..2147306d715 --- /dev/null +++ b/compiler/testData/klibABI/removeClassAsVariableType/project.info @@ -0,0 +1,7 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + +STEP 1: + libs: lib1 \ No newline at end of file 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 24e8230806c..f11f1c5d65b 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 @@ -50,6 +50,11 @@ public class JsKLibABITestCaseGenerated extends AbstractJsKLibABITestCase { runTest("compiler/testData/klibABI/removeAbstractPropertyFromInterface/"); } + @TestMetadata("removeClassAsConstructorCall") + public void testRemoveClassAsConstructorCall() throws Exception { + runTest("compiler/testData/klibABI/removeClassAsConstructorCall/"); + } + @TestMetadata("removeClassAsParameterType") public void testRemoveClassAsParameterType() throws Exception { runTest("compiler/testData/klibABI/removeClassAsParameterType/"); @@ -70,6 +75,11 @@ public class JsKLibABITestCaseGenerated extends AbstractJsKLibABITestCase { runTest("compiler/testData/klibABI/removeClassAsTypeArgument/"); } + @TestMetadata("removeClassAsVariableType") + public void testRemoveClassAsVariableType() throws Exception { + runTest("compiler/testData/klibABI/removeClassAsVariableType/"); + } + @TestMetadata("removeFunction") public void testRemoveFunction() throws Exception { runTest("compiler/testData/klibABI/removeFunction/"); 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 63bd97790a6..e76e33ca1db 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 @@ -48,6 +48,12 @@ public class KlibABITestGenerated extends AbstractNativeKlibABITest { runTest("compiler/testData/klibABI/removeAbstractPropertyFromInterface/"); } + @Test + @TestMetadata("removeClassAsConstructorCall") + public void testRemoveClassAsConstructorCall() throws Exception { + runTest("compiler/testData/klibABI/removeClassAsConstructorCall/"); + } + @Test @TestMetadata("removeClassAsParameterType") public void testRemoveClassAsParameterType() throws Exception { @@ -72,6 +78,12 @@ public class KlibABITestGenerated extends AbstractNativeKlibABITest { runTest("compiler/testData/klibABI/removeClassAsTypeArgument/"); } + @Test + @TestMetadata("removeClassAsVariableType") + public void testRemoveClassAsVariableType() throws Exception { + runTest("compiler/testData/klibABI/removeClassAsVariableType/"); + } + @Test @TestMetadata("removeFunction") public void testRemoveFunction() throws Exception {