From 7eda60d57eb5b00dadee5f835309c50f42b13936 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 13 Dec 2019 20:01:49 +0300 Subject: [PATCH] Minor, add more tests on signature-polymorphic calls Add a test on null (since null is a special case in the PolymorphicSignature spec), and a test on a call without assignment to a variable --- .../box/polymorphicSignature/invoke.kt | 3 ++ .../box/polymorphicSignature/nullArgument.kt | 28 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 ++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ .../ir/FirBlackBoxCodegenTestGenerated.java | 10 +++++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 5 ++++ 6 files changed, 56 insertions(+) create mode 100644 compiler/testData/codegen/box/polymorphicSignature/nullArgument.kt diff --git a/compiler/testData/codegen/box/polymorphicSignature/invoke.kt b/compiler/testData/codegen/box/polymorphicSignature/invoke.kt index 3dac5cd020c..c0080712fdd 100644 --- a/compiler/testData/codegen/box/polymorphicSignature/invoke.kt +++ b/compiler/testData/codegen/box/polymorphicSignature/invoke.kt @@ -43,5 +43,8 @@ fun box(): String { val result3 = (o.p).handle.invoke(C(), "Hello", 0.01, Derived()) as String if (result1 != result3) return "Fail 3: $result1 != $result3" + // Check cast expression without assignment to a variable + mh.invoke(C(), "", 0.01, Derived()) as String + return "OK" } diff --git a/compiler/testData/codegen/box/polymorphicSignature/nullArgument.kt b/compiler/testData/codegen/box/polymorphicSignature/nullArgument.kt new file mode 100644 index 00000000000..82dd0c4c1d3 --- /dev/null +++ b/compiler/testData/codegen/box/polymorphicSignature/nullArgument.kt @@ -0,0 +1,28 @@ +// !LANGUAGE: +PolymorphicSignature +// TARGET_BACKEND: JVM +// IGNORE_BACKEND_FIR: JVM_IR +// FULL_JDK +// SKIP_JDK6 +// WITH_RUNTIME + +import java.lang.invoke.MethodHandles +import java.lang.invoke.MethodType + +var result: String? = "Fail" + +class C { + fun foo(s: Nothing?) { + result = s + } +} + +fun box(): String { + val mh = MethodHandles.lookup().findVirtual( + C::class.java, "foo", + MethodType.methodType(Void.TYPE, Void::class.java) + ) + + mh.invokeExact(C(), null) + + return result ?: "OK" +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index a9eeec0f747..ec797069fe3 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -18410,6 +18410,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/polymorphicSignature/invokeExactWithInlineClass.kt"); } + @TestMetadata("nullArgument.kt") + public void testNullArgument() throws Exception { + runTest("compiler/testData/codegen/box/polymorphicSignature/nullArgument.kt"); + } + @TestMetadata("varargOfObjects_after.kt") public void testVarargOfObjects_after() throws Exception { runTest("compiler/testData/codegen/box/polymorphicSignature/varargOfObjects_after.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index c241f69b622..d176f36a7ff 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -18410,6 +18410,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/polymorphicSignature/invokeExactWithInlineClass.kt"); } + @TestMetadata("nullArgument.kt") + public void testNullArgument() throws Exception { + runTest("compiler/testData/codegen/box/polymorphicSignature/nullArgument.kt"); + } + @TestMetadata("varargOfObjects_after.kt") public void testVarargOfObjects_after() throws Exception { runTest("compiler/testData/codegen/box/polymorphicSignature/varargOfObjects_after.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index b7b622cbf9c..c9bae2fcaf6 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -16894,6 +16894,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/polymorphicSignature/invokeExactWithInlineClass.kt"); } + @TestMetadata("nullArgument.kt") + public void testNullArgument() throws Exception { + runTest("compiler/testData/codegen/box/polymorphicSignature/nullArgument.kt"); + } + @TestMetadata("varargOfObjects_after.kt") public void testVarargOfObjects_after() throws Exception { runTest("compiler/testData/codegen/box/polymorphicSignature/varargOfObjects_after.kt"); @@ -16903,6 +16908,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT public void testVarargOfObjects_before() throws Exception { runTest("compiler/testData/codegen/box/polymorphicSignature/varargOfObjects_before.kt"); } + + @TestMetadata("voidReturnType.kt") + public void testVoidReturnType() throws Exception { + runTest("compiler/testData/codegen/box/polymorphicSignature/voidReturnType.kt"); + } } @TestMetadata("compiler/testData/codegen/box/primitiveTypes") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index b8ce1f06fd8..0b2c5cb83f3 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -16894,6 +16894,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/polymorphicSignature/invokeExactWithInlineClass.kt"); } + @TestMetadata("nullArgument.kt") + public void testNullArgument() throws Exception { + runTest("compiler/testData/codegen/box/polymorphicSignature/nullArgument.kt"); + } + @TestMetadata("varargOfObjects_after.kt") public void testVarargOfObjects_after() throws Exception { runTest("compiler/testData/codegen/box/polymorphicSignature/varargOfObjects_after.kt");