JVM_IR KT-45779 don't generate intrinsic method refs via invokedynamic
This commit is contained in:
committed by
TeamCityServer
parent
f3a935adb9
commit
72804d2e8c
+6
@@ -21028,6 +21028,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/innerConstructorRef.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/innerConstructorRef.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("intPlus.kt")
|
||||||
|
public void testIntPlus() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intPlus.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("intReturnTypeAsNumber.kt")
|
@TestMetadata("intReturnTypeAsNumber.kt")
|
||||||
public void testIntReturnTypeAsNumber() throws Exception {
|
public void testIntReturnTypeAsNumber() throws Exception {
|
||||||
|
|||||||
+4
@@ -72,6 +72,10 @@ internal class LambdaMetafactoryArgumentsBuilder(
|
|||||||
|
|
||||||
val implFun = reference.symbol.owner
|
val implFun = reference.symbol.owner
|
||||||
|
|
||||||
|
// Don't generate references to intrinsic functions as invokedynamic (no such method exists at run-time).
|
||||||
|
if (context.irIntrinsics.getIntrinsic(implFun.symbol) != null)
|
||||||
|
return null
|
||||||
|
|
||||||
if (implFun is IrConstructor && implFun.visibility.isPrivate) {
|
if (implFun is IrConstructor && implFun.visibility.isPrivate) {
|
||||||
// Kotlin generates constructor accessors differently from Java.
|
// Kotlin generates constructor accessors differently from Java.
|
||||||
// TODO more precise accessibility check (see SyntheticAccessorLowering::isAccessible)
|
// TODO more precise accessibility check (see SyntheticAccessorLowering::isAccessible)
|
||||||
|
|||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
// TARGET_BACKEND: JVM
|
||||||
|
// IGNORE_BACKEND: ANDROID
|
||||||
|
// ^ uses API not implemented on minSdkVersion 19
|
||||||
|
// WITH_RUNTIME
|
||||||
|
// JVM_TARGET: 1.8
|
||||||
|
// FULL_JDK
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val map = HashMap<String, Int>()
|
||||||
|
map["a"] = 1
|
||||||
|
map.merge("a", 2, Int::plus)
|
||||||
|
val t = map["a"]
|
||||||
|
return if (t == 3) "OK" else "failed: t=$t"
|
||||||
|
}
|
||||||
+6
@@ -21004,6 +21004,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/innerConstructorRef.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/innerConstructorRef.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("intPlus.kt")
|
||||||
|
public void testIntPlus() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intPlus.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("intReturnTypeAsNumber.kt")
|
@TestMetadata("intReturnTypeAsNumber.kt")
|
||||||
public void testIntReturnTypeAsNumber() throws Exception {
|
public void testIntReturnTypeAsNumber() throws Exception {
|
||||||
|
|||||||
+6
@@ -21028,6 +21028,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/innerConstructorRef.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/innerConstructorRef.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("intPlus.kt")
|
||||||
|
public void testIntPlus() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intPlus.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("intReturnTypeAsNumber.kt")
|
@TestMetadata("intReturnTypeAsNumber.kt")
|
||||||
public void testIntReturnTypeAsNumber() throws Exception {
|
public void testIntReturnTypeAsNumber() throws Exception {
|
||||||
|
|||||||
+5
@@ -17563,6 +17563,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/innerConstructorRef.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/innerConstructorRef.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("intPlus.kt")
|
||||||
|
public void testIntPlus() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intPlus.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("intReturnTypeAsNumber.kt")
|
@TestMetadata("intReturnTypeAsNumber.kt")
|
||||||
public void testIntReturnTypeAsNumber() throws Exception {
|
public void testIntReturnTypeAsNumber() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intReturnTypeAsNumber.kt");
|
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intReturnTypeAsNumber.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user