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");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intPlus.kt")
|
||||
public void testIntPlus() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intPlus.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intReturnTypeAsNumber.kt")
|
||||
public void testIntReturnTypeAsNumber() throws Exception {
|
||||
|
||||
+4
@@ -72,6 +72,10 @@ internal class LambdaMetafactoryArgumentsBuilder(
|
||||
|
||||
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) {
|
||||
// Kotlin generates constructor accessors differently from Java.
|
||||
// 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");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intPlus.kt")
|
||||
public void testIntPlus() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intPlus.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intReturnTypeAsNumber.kt")
|
||||
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");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intPlus.kt")
|
||||
public void testIntPlus() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intPlus.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intReturnTypeAsNumber.kt")
|
||||
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");
|
||||
}
|
||||
|
||||
@TestMetadata("intPlus.kt")
|
||||
public void testIntPlus() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intPlus.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("intReturnTypeAsNumber.kt")
|
||||
public void testIntReturnTypeAsNumber() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/intReturnTypeAsNumber.kt");
|
||||
|
||||
Reference in New Issue
Block a user