JVM: CHECK_BYTECODE_TEST directive + use it in INVOKEDYNAMIC tests

This commit is contained in:
Dmitry Petrov
2021-04-02 16:33:52 +03:00
committed by TeamCityServer
parent ca352c9556
commit 162363a324
119 changed files with 581 additions and 30 deletions
@@ -55,9 +55,10 @@ fun readExpectedOccurrences(lines: List<String>): List<OccurrenceInfo> {
fun readExpectedOccurrencesForMultiFileTest( fun readExpectedOccurrencesForMultiFileTest(
fileName: String, fileName: String,
fileContent: String, fileContent: String,
destination: MutableMap<String, List<OccurrenceInfo>> withGeneratedFile: MutableMap<String, List<OccurrenceInfo>>,
global: MutableList<OccurrenceInfo>
) { ) {
var currentOccurrenceInfos: MutableList<OccurrenceInfo>? = null var currentOccurrenceInfos: MutableList<OccurrenceInfo> = global
var backend = TargetBackend.ANY var backend = TargetBackend.ANY
for (line in fileContent.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()) { for (line in fileContent.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()) {
if (line.contains(JVM_TEMPLATES)) backend = TargetBackend.JVM if (line.contains(JVM_TEMPLATES)) backend = TargetBackend.JVM
@@ -66,18 +67,15 @@ fun readExpectedOccurrencesForMultiFileTest(
val atOutputFileMatcher = AT_OUTPUT_FILE_PATTERN.matcher(line) val atOutputFileMatcher = AT_OUTPUT_FILE_PATTERN.matcher(line)
if (atOutputFileMatcher.matches()) { if (atOutputFileMatcher.matches()) {
val outputFileName = atOutputFileMatcher.group(1) val outputFileName = atOutputFileMatcher.group(1)
if (destination.containsKey(outputFileName)) { if (withGeneratedFile.containsKey(outputFileName)) {
throw AssertionError("${fileName}: Expected occurrences for output file $outputFileName were already provided") throw AssertionError("${fileName}: Expected occurrences for output file $outputFileName were already provided")
} }
currentOccurrenceInfos = ArrayList() currentOccurrenceInfos = ArrayList()
destination[outputFileName] = currentOccurrenceInfos withGeneratedFile[outputFileName] = currentOccurrenceInfos
} }
val expectedOccurrencesMatcher = EXPECTED_OCCURRENCES_PATTERN.matcher(line) val expectedOccurrencesMatcher = EXPECTED_OCCURRENCES_PATTERN.matcher(line)
if (expectedOccurrencesMatcher.matches()) { if (expectedOccurrencesMatcher.matches()) {
if (currentOccurrenceInfos == null) {
throw AssertionError("${fileName}: Should specify output file with '// @<OUTPUT_FILE_NAME>:' before expectations")
}
val occurrenceInfo = parseOccurrenceInfo(expectedOccurrencesMatcher, backend) val occurrenceInfo = parseOccurrenceInfo(expectedOccurrencesMatcher, backend)
currentOccurrenceInfos.add(occurrenceInfo) currentOccurrenceInfos.add(occurrenceInfo)
} }
@@ -4,6 +4,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class BigArityExtLambdaKt\$box\$1
fun test( fun test(
extFn: Int.( extFn: Int.(
p0: String, p1: String, p0: String, p1: String,
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory\.metafactory
// 1 final class BigArityLambdaKt\$box\$1
fun box() = fun box() =
{ p0: String, p1: String, p2: Int, p3: Int, p4: Int, p5: Int, p6: Int, p7: Int, p8: Int, p9: Int, { p0: String, p1: String, p2: Int, p3: Int, p4: Int, p5: Int, p6: Int, p7: Int, p8: Int, p9: Int,
p10: Int, p11: Int, p12: Int, p13: Int, p14: Int, p15: Int, p16: Int, p17: Int, p18: Int, p19: Int, p10: Int, p11: Int, p12: Int, p13: Int, p14: Int, p15: Int, p16: Int, p17: Int, p18: Int, p19: Int,
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
class C(val x: String) { class C(val x: String) {
fun test() = { x } fun test() = { x }
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
class C(val x: String) class C(val x: String)
fun C.test() = { x } fun C.test() = { x }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun box(): String { fun box(): String {
val ok = "OK" val ok = "OK"
return { ok }() return { ok }()
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun box(): String { fun box(): String {
var ok = "Failed" var ok = "Failed"
{ ok = "OK" }() { ok = "OK" }()
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
class C(val x: String) class C(val x: String)
fun boxLambda(lambda: C.() -> String) = lambda fun boxLambda(lambda: C.() -> String) = lambda
@@ -2,9 +2,14 @@
// IGNORE_BACKEND: JVM // IGNORE_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// WITH_SIGNATURES // WITH_SIGNATURES
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun <T1, R> call(value: T1, f: (T1) -> R): R { fun <T1, R> call(value: T1, f: (T1) -> R): R {
return f(value) return f(value)
} }
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class LambdaWithInlineAnyKt\$box\$t\$1
inline class Z(val value: Any) inline class Z(val value: Any)
fun foo1(fs: (Z) -> Z) = fs(Z(1)) fun foo1(fs: (Z) -> Z) = fs(Z(1))
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
inline class Z(val value: Int) inline class Z(val value: Int)
fun foo1(fs: (Z) -> Z) = fs(Z(1)) fun foo1(fs: (Z) -> Z) = fs(Z(1))
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
inline class Z(val value: Any?) inline class Z(val value: Any?)
fun foo1(fs: (Z) -> Z) = fs(Z(1)) fun foo1(fs: (Z) -> Z) = fs(Z(1))
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
inline class Z(val value: Int?) inline class Z(val value: Int?)
fun foo1(fs: (Z) -> Z) = fs(Z(1)) fun foo1(fs: (Z) -> Z) = fs(Z(1))
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
inline class Z(val value: String?) inline class Z(val value: String?)
fun foo1(fs: (Z) -> Z) = fs(Z("O")) fun foo1(fs: (Z) -> Z) = fs(Z("O"))
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class LambdaWithInlineStringKt\$box\$t\$1
inline class Z(val value: String) inline class Z(val value: String)
fun foo1(fs: (Z) -> Z) = fs(Z("O")) fun foo1(fs: (Z) -> Z) = fs(Z("O"))
@@ -4,6 +4,10 @@
// LAMBDAS: INDY // LAMBDAS: INDY
// FULL_JDK // FULL_JDK
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun lambdaIsSerializable(fn: () -> Unit) = fn is java.io.Serializable fun lambdaIsSerializable(fn: () -> Unit) = fn is java.io.Serializable
fun box(): String { fun box(): String {
@@ -7,6 +7,10 @@
// desugaring on Android // desugaring on Android
// IGNORE_BACKEND: ANDROID // IGNORE_BACKEND: ANDROID
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun lambdaToString(fn: () -> Unit) = fn.toString() fun lambdaToString(fn: () -> Unit) = fn.toString()
fun box(): String { fun box(): String {
@@ -2,4 +2,8 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 3 java/lang/invoke/LambdaMetafactory
fun box() = { { "O" }() + { "K" }() }() fun box() = { { "O" }() + { "K" }() }()
@@ -2,7 +2,12 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// WITH_RUNTIME // WITH_RUNTIME
// CHECK_BYTECODE_TEXT
// FILE: nullabilityAssertions.kt // FILE: nullabilityAssertions.kt
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun box(): String { fun box(): String {
val fn: (String) -> String = { it } val fn: (String) -> String = { it }
try { try {
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun box(): String { fun box(): String {
val test = { i: Int -> i + 40 }(2) val test = { i: Int -> i + 40 }(2)
if (test != 42) return "Failed: test=$test" if (test != 42) return "Failed: test=$test"
@@ -2,4 +2,8 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun box() = { "OK" }() fun box() = { "OK" }()
@@ -2,15 +2,20 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// WITH_RUNTIME // WITH_RUNTIME
// WITH_COROUTINES
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class SuspendLambdaKt\$box\$1
import kotlin.coroutines.* import kotlin.coroutines.*
var c: Continuation<Unit>? = null var c: Continuation<Unit>? = null
suspend fun suspendMe() = suspendCoroutine<Unit> { continuation -> suspend fun suspendMe() =
c = continuation suspendCoroutine<Unit> { continuation ->
} c = continuation
}
fun builder(c: suspend () -> Unit) { fun builder(c: suspend () -> Unit) {
c.startCoroutine(object: Continuation<Unit> { c.startCoroutine(object: Continuation<Unit> {
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
var ok = "Failed" var ok = "Failed"
fun box(): String { fun box(): String {
@@ -2,7 +2,17 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// WITH_RUNTIME // WITH_RUNTIME
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 19 final synthetic class BoundAdaptedFunctionReferenceKt\$box\$[0-9]*
// 1 final synthetic class FromOtherFileKt\$target1FromOtherFile\$[0-9]*
// 1 final synthetic class FromOtherFileKt\$adapted1FromOtherFile\$[0-9]*
// 1 final synthetic class FromOtherFileKt\$adapted2FromOtherFile\$[0-9]*
// FILE: boundAdaptedFunctionReference.kt // FILE: boundAdaptedFunctionReference.kt
fun checkEqual(x: Any, y: Any) { fun checkEqual(x: Any, y: Any) {
if (x != y || y != x) throw AssertionError("$x and $y should be equal") if (x != y || y != x) throw AssertionError("$x and $y should be equal")
if (x.hashCode() != y.hashCode()) throw AssertionError("$x and $y should have the same hash code") if (x.hashCode() != y.hashCode()) throw AssertionError("$x and $y should have the same hash code")
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 final synthetic class BoundReferenceKt\$box\$[0-9]*
fun interface KRunnable { fun interface KRunnable {
fun run() fun run()
} }
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 final synthetic class BuiltinMemberReferenceKt\$box\$test\$1
fun interface IntFun { fun interface IntFun {
fun invoke(i: Int): Int fun invoke(i: Int): Int
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface KRunnable { fun interface KRunnable {
fun run() fun run()
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface KRunnable { fun interface KRunnable {
fun run() fun run()
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface KRunnable { fun interface KRunnable {
fun run() fun run()
} }
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: capturingIndySam.kt // FILE: capturingIndySam.kt
var test = "Failed" var test = "Failed"
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface KRunnable { fun interface KRunnable {
fun run() fun run()
} }
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 final synthetic class ConstructorReferenceKt\$box\$1
class C(val test: String) class C(val test: String)
fun interface MakeC { fun interface MakeC {
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 final class CovariantOverrideWithPrimitiveKt\$box\$test\$
fun interface IFooAny { fun interface IFooAny {
fun foo(): Any fun foo(): Any
} }
@@ -1,6 +1,13 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 final class EnhancedNullabilityKt\$box\$t1\$1
// TODO check why EnhancedNullabilityKt\$box\$t1\$1 is not synthetic
// FILE: enhancedNullability.kt // FILE: enhancedNullability.kt
fun interface IGetInt { fun interface IGetInt {
fun get(x: Int): Int fun get(x: Int): Int
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: capturedSamArgument.kt // FILE: capturedSamArgument.kt
fun box(): String { fun box(): String {
var lambda = { "OK" } var lambda = { "OK" }
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: capturingLambda.kt // FILE: capturingLambda.kt
fun box(): String { fun box(): String {
val co = 'O' val co = 'O'
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: extensionLambda1.kt // FILE: extensionLambda1.kt
fun samExtLambda(ext: String.() -> String) = Sam(ext) fun samExtLambda(ext: String.() -> String) = Sam(ext)
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: extensionLambda2.kt // FILE: extensionLambda2.kt
fun samExtLambda(ext: String.(String) -> String) = Sam(ext) fun samExtLambda(ext: String.(String) -> String) = Sam(ext)
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: genericSam1.kt // FILE: genericSam1.kt
fun box(): String = Sam<String, String> { "O" + it }.get("K") fun box(): String = Sam<String, String> { "O" + it }.get("K")
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: genericSam2.kt // FILE: genericSam2.kt
fun <FT, FR> test(lambda: (FT) -> FR) = Sam(lambda) fun <FT, FR> test(lambda: (FT) -> FR) = Sam(lambda)
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: simple.kt // FILE: simple.kt
val lambda = { "OK" } val lambda = { "OK" }
@@ -1,6 +1,12 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 final synthetic class AdaptedFunRefWithCoercionToUnitKt\$box\$[0-9]+
// FILE: adaptedFunRefWithCoercionToUnit.kt // FILE: adaptedFunRefWithCoercionToUnit.kt
var ok = "Failed" var ok = "Failed"
@@ -1,6 +1,12 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 final synthetic class AdaptedFunRefWithDefaultParametersKt\$box\$[0-9]+
// FILE: adaptedFunRefWithDefaultParameters.kt // FILE: adaptedFunRefWithDefaultParameters.kt
var ok = "Failed" var ok = "Failed"
@@ -1,6 +1,12 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 final synthetic class AdaptedFunRefWithVarargKt\$box\$[0-9]+
// FILE: adaptedFunRefWithVararg.kt // FILE: adaptedFunRefWithVararg.kt
var ok = "Failed" var ok = "Failed"
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: boundExtFun.kt // FILE: boundExtFun.kt
fun String.k(s: String) = this + s + "K" fun String.k(s: String) = this + s + "K"
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: boundInnerConstructorRef.kt // FILE: boundInnerConstructorRef.kt
class Outer(val s1: String) { class Outer(val s1: String) {
inner class Inner(val s2: String) { inner class Inner(val s2: String) {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: boundLocalExtFun.kt // FILE: boundLocalExtFun.kt
fun box(): String { fun box(): String {
fun String.k(s: String) = this + s + "K" fun String.k(s: String) = this + s + "K"
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: boundMemberRef.kt // FILE: boundMemberRef.kt
class C(val t: String) { class C(val t: String) {
fun test() = t fun test() = t
@@ -4,6 +4,10 @@
// WITH_RUNTIME // WITH_RUNTIME
// FULL_JDK // FULL_JDK
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 2 java/lang/invoke/LambdaMetafactory
// FILE: boundRefToSuperClassMethod.kt // FILE: boundRefToSuperClassMethod.kt
class Impl(val set1: Set<String>, val set2: Set<String>) : JDerived() { class Impl(val set1: Set<String>, val set2: Set<String>) : JDerived() {
@@ -4,6 +4,10 @@
// WITH_RUNTIME // WITH_RUNTIME
// FULL_JDK // FULL_JDK
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 2 java/lang/invoke/LambdaMetafactory
// FILE: boundRefToSuperInterfaceMethod.kt // FILE: boundRefToSuperInterfaceMethod.kt
class Impl(val set1: Set<String>, val set2: Set<String>) : JDerived { class Impl(val set1: Set<String>, val set2: Set<String>) : JDerived {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: constructorRef.kt // FILE: constructorRef.kt
class C(val t: String) class C(val t: String)
@@ -2,6 +2,11 @@
// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND_FIR: JVM_IR
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: enhancedNullability.kt // FILE: enhancedNullability.kt
fun mul2(x: Int) = x * 2 fun mul2(x: Int) = x * 2
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: innerConstructorRef.kt // FILE: innerConstructorRef.kt
class Outer(val s1: String) { class Outer(val s1: String) {
inner class Inner(val s2: String) { inner class Inner(val s2: String) {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: intReturnTypeAsNumber.kt // FILE: intReturnTypeAsNumber.kt
fun box(): String { fun box(): String {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: interfaceMemberRef.kt // FILE: interfaceMemberRef.kt
interface IFoo { interface IFoo {
fun foo(): String fun foo(): String
@@ -5,6 +5,11 @@
// FULL_JDK // FULL_JDK
// IGNORE_DEXING // IGNORE_DEXING
// ^ D8 fails with AssertionError, possible reason: only Kotlin output files are passed to D8 // ^ D8 fails with AssertionError, possible reason: only Kotlin output files are passed to D8
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: kt45581.kt // FILE: kt45581.kt
fun box(): String = J.bar(emptySet<String>()::contains) fun box(): String = J.bar(emptySet<String>()::contains)
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: localFunction1.kt // FILE: localFunction1.kt
fun box(): String { fun box(): String {
fun ok() = "OK" fun ok() = "OK"
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: localFunction2.kt // FILE: localFunction2.kt
fun box(): String { fun box(): String {
val t = "O" val t = "O"
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: memberRef.kt // FILE: memberRef.kt
class C(val t: String) { class C(val t: String) {
fun test() = t fun test() = t
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// WITH_RUNTIME // WITH_RUNTIME
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: JavaRunner.java // FILE: JavaRunner.java
public class JavaRunner { public class JavaRunner {
public static void runTwice(Runnable runnable) { public static void runTwice(Runnable runnable) {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: nothingReturnTypeAsObject.kt // FILE: nothingReturnTypeAsObject.kt
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: nothingReturnTypeAsString.kt // FILE: nothingReturnTypeAsString.kt
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: nullableNothingReturnTypeAsObject.kt // FILE: nullableNothingReturnTypeAsObject.kt
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: nullableNothingReturnTypeAsString.kt // FILE: nullableNothingReturnTypeAsString.kt
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: simple.kt // FILE: simple.kt
fun ok() = "OK" fun ok() = "OK"
@@ -1,6 +1,12 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 final synthetic class VoidReturnTypeAsObjectKt\$box\$r\$[0-9]+
// FILE: voidReturnTypeAsObject.kt // FILE: voidReturnTypeAsObject.kt
var t = "Failed" var t = "Failed"
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface IFoo<T> { fun interface IFoo<T> {
fun foo(x: T): T fun foo(x: T): T
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 2 java/lang/invoke/LambdaMetafactory
fun interface IFoo<T> { fun interface IFoo<T> {
fun foo(x: T): T fun foo(x: T): T
} }
@@ -5,6 +5,10 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// WITH_SIGNATURES // WITH_SIGNATURES
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface FunIFace<T0, R> { fun interface FunIFace<T0, R> {
fun call(arg: T0): R fun call(arg: T0): R
} }
@@ -4,6 +4,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class FunInterfaceWithInlineAnyKt\$box\$t\$1
inline class Z(val value: Any) inline class Z(val value: Any)
fun interface IFooZ { fun interface IFooZ {
@@ -4,6 +4,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class FunInterfaceWithInlineIntKt\$box\$t\$1
inline class Z(val value: Int) inline class Z(val value: Int)
fun interface IFooZ { fun interface IFooZ {
@@ -4,6 +4,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class FunInterfaceWithInlineNAnyKt\$box\$t\$1
inline class Z(val value: Any?) inline class Z(val value: Any?)
fun interface IFooZ { fun interface IFooZ {
@@ -4,6 +4,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class FunInterfaceWithInlineNIntKt\$box\$t\$1
inline class Z(val value: Int?) inline class Z(val value: Int?)
fun interface IFooZ { fun interface IFooZ {
@@ -4,6 +4,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class FunInterfaceWithInlineNStringKt\$box\$t\$1
inline class Z(val value: String?) inline class Z(val value: String?)
fun interface IFooZ { fun interface IFooZ {
@@ -4,6 +4,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class FunInterfaceWithInlineStringKt\$box\$t\$1
inline class Z(val value: String) inline class Z(val value: String)
fun interface IFooZ { fun interface IFooZ {
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class GenericFunInterfaceWithInlineAnyKt\$box\$t\$1
inline class Z(val value: Any) inline class Z(val value: Any)
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
inline class Z(val value: Int) inline class Z(val value: Int)
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
inline class Z(val value: Any?) inline class Z(val value: Any?)
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
inline class Z(val value: Int?) inline class Z(val value: Int?)
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
inline class Z(val value: String?) inline class Z(val value: String?)
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class GenericFunInterfaceWithInlineStringKt\$box\$t\$1
inline class Z(val value: String) inline class Z(val value: String)
fun interface IFoo<T> { fun interface IFoo<T> {
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory\.metafactory
fun interface INum { fun interface INum {
fun get(): Number fun get(): Number
} }
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: nullabilityAssertions.kt // FILE: nullabilityAssertions.kt
fun box(): String { fun box(): String {
try { try {
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 2 java/lang/invoke/LambdaMetafactory
fun interface IFoo { fun interface IFoo {
fun foo(): String fun foo(): String
} }
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 4 java/lang/invoke/LambdaMetafactory
// FILE: primitiveVsWrapperInSam.kt // FILE: primitiveVsWrapperInSam.kt
var test = 0 var test = 0
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 3 java/lang/invoke/LambdaMetafactory
fun interface IFoo { fun interface IFoo {
fun foo(k: String): String fun foo(k: String): String
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
fun interface KRunnable { fun interface KRunnable {
fun run() fun run()
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface IExtFun { fun interface IExtFun {
fun String.foo(s: String) : String fun String.foo(s: String) : String
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface KRunnable { fun interface KRunnable {
fun run() fun run()
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface KRunnable { fun interface KRunnable {
fun run() fun run()
} }
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
// FILE: simpleIndySam.kt // FILE: simpleIndySam.kt
var test = "Failed" var test = "Failed"
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface IFooAny { fun interface IFooAny {
fun foo(x: Any): Any fun foo(x: Any): Any
} }
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class CovariantOverrideWithNNothingKt\$box\$1
fun interface IFooNStr { fun interface IFooNStr {
fun foo(x: Any): String? fun foo(x: Any): String?
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface Cmp<T> { fun interface Cmp<T> {
fun compare(a: T, b: T): Int fun compare(a: T, b: T): Int
} }
@@ -1,6 +1,11 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface Cmp<T> { fun interface Cmp<T> {
fun compare(a: T, b: T): Int fun compare(a: T, b: T): Int
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface GenericToAny<T> { fun interface GenericToAny<T> {
fun invoke(x: T): Any fun invoke(x: T): Any
} }
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class InheritedWithCharDiamondKt\$box\$1
fun interface GenericToAny<T> { fun interface GenericToAny<T> {
fun invoke(x: T): Any fun invoke(x: T): Any
} }
@@ -2,6 +2,11 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// 1 class InheritedWithCharExplicitlyOverriddenKt\$box\$1
fun interface GenericToAny<T> { fun interface GenericToAny<T> {
fun invoke(x: T): Any fun invoke(x: T): Any
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface GenericToAny<T> { fun interface GenericToAny<T> {
fun invoke(x: T): Any fun invoke(x: T): Any
} }
@@ -2,6 +2,10 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun interface GenericToAny<T> { fun interface GenericToAny<T> {
fun invoke(x: T): Any fun invoke(x: T): Any
} }

Some files were not shown because too many files have changed in this diff Show More