Support specifying different bytecode listings for FIR and old frontend

This commit is contained in:
vladislav.grechko
2022-10-18 20:58:04 +02:00
committed by teamcity
parent 8a89b2f29f
commit 70c2f2b86f
77 changed files with 95 additions and 2 deletions
@@ -0,0 +1,13 @@
@kotlin.Metadata
public final class AC {
// source: 'AC.kt'
private final field number: int
public method <init>(): void
public final @org.jetbrains.annotations.NotNull method getNumber(): java.lang.Number
}
@kotlin.Metadata
public interface AI {
// source: 'AI.kt'
public abstract @org.jetbrains.annotations.NotNull method getNumber(): java.lang.Number
}
@@ -1,5 +1,7 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// FIR_IDENTICAL
inline fun <T> useRef(value: T, f: (T) -> Boolean) = f(value) inline fun <T> useRef(value: T, f: (T) -> Boolean) = f(value)
@@ -1,6 +1,7 @@
// WITH_STDLIB // WITH_STDLIB
// WITH_COROUTINES // WITH_COROUTINES
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
import helpers.* import helpers.*
import kotlin.coroutines.* import kotlin.coroutines.*
@@ -1,6 +1,7 @@
// WITH_STDLIB // WITH_STDLIB
// WITH_COROUTINES // WITH_COROUTINES
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
import helpers.* import helpers.*
import kotlin.coroutines.* import kotlin.coroutines.*
@@ -6,6 +6,7 @@
// `lambda` should not be wrapped in yet another object (so no OnInlineArgumentKt$box$1$1). // `lambda` should not be wrapped in yet another object (so no OnInlineArgumentKt$box$1$1).
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
import helpers.* import helpers.*
import kotlin.coroutines.* import kotlin.coroutines.*
@@ -3,6 +3,7 @@
// WITH_STDLIB // WITH_STDLIB
// WITH_COROUTINES // WITH_COROUTINES
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
import helpers.* import helpers.*
import kotlin.coroutines.* import kotlin.coroutines.*
import kotlin.coroutines.intrinsics.* import kotlin.coroutines.intrinsics.*
@@ -1,6 +1,7 @@
// WITH_STDLIB // WITH_STDLIB
// WITH_COROUTINES // WITH_COROUTINES
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// CHECK_NEW_COUNT: function=suspendHere count=0 // CHECK_NEW_COUNT: function=suspendHere count=0
// FIXME: Coroutine inlining // FIXME: Coroutine inlining
// CHECK_NEW_COUNT: function=complexSuspend count=0 TARGET_BACKENDS=JS // CHECK_NEW_COUNT: function=complexSuspend count=0 TARGET_BACKENDS=JS
@@ -3,6 +3,7 @@
// WITH_STDLIB // WITH_STDLIB
// WITH_COROUTINES // WITH_COROUTINES
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// In this test the following transformation are occuring: // In this test the following transformation are occuring:
// flow$1 -> flowWith$$inlined$flow$1 // flow$1 -> flowWith$$inlined$flow$1
@@ -5,6 +5,7 @@
// WITH_STDLIB // WITH_STDLIB
// WITH_COROUTINES // WITH_COROUTINES
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
import helpers.* import helpers.*
import kotlin.coroutines.* import kotlin.coroutines.*
+1
View File
@@ -1,6 +1,7 @@
// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND_FIR: JVM_IR
// FIR status: [IR VALIDATION] Duplicate IR node: FUN GENERATED_DATA_CLASS_MEMBER name:toString // FIR status: [IR VALIDATION] Duplicate IR node: FUN GENERATED_DATA_CLASS_MEMBER name:toString
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
import kotlin.test.* import kotlin.test.*
@@ -3,6 +3,7 @@
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// FULL_JDK // FULL_JDK
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
import java.io.* import java.io.*
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
operator fun Any?.getValue(thisRef: Any?, property: Any?) = operator fun Any?.getValue(thisRef: Any?, property: Any?) =
if (this == 1 && thisRef == null) "OK" else "Failed" if (this == 1 && thisRef == null) "OK" else "Failed"
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
operator fun Any?.getValue(thisRef: Any?, property: Any?) = operator fun Any?.getValue(thisRef: Any?, property: Any?) =
if (this == a && thisRef == null) "OK" else "Failed" if (this == a && thisRef == null) "OK" else "Failed"
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
operator fun Any?.getValue(thisRef: Any?, property: Any?) = operator fun Any?.getValue(thisRef: Any?, property: Any?) =
if (this == null && thisRef == null) "OK" else "Failed" if (this == null && thisRef == null) "OK" else "Failed"
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
class A { class A {
val b = B() val b = B()
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
class C { class C {
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
object O { object O {
val impl = 123 val impl = 123
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
val impl = 123 val impl = 123
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
//FILE file1.kt //FILE file1.kt
val impl = 123 val impl = 123
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
import O.d import O.d
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
enum class E { X } enum class E { X }
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// MODULE: lib // MODULE: lib
// FILE: file1.kt // FILE: file1.kt
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
enum class E { enum class E {
OK, NOT_OK OK, NOT_OK
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
enum class E { enum class E {
OK, NOT_OK OK, NOT_OK
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// IGNORE_BACKEND: JS_IR // IGNORE_BACKEND: JS_IR
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
object O { object O {
object P object P
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
var initialized = false var initialized = false
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
var initialized = false var initialized = false
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
var initialized = false var initialized = false
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
class O { class O {
operator fun getValue(thisRef: Any?, property: Any?) = operator fun getValue(thisRef: Any?, property: Any?) =
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
class C { class C {
operator fun getValue(thisRef: Any?, property: Any?) = operator fun getValue(thisRef: Any?, property: Any?) =
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
class C { class C {
val s: String by this val s: String by this
@@ -1,6 +1,7 @@
// WITH_STDLIB // WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter // LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION OPTIONAL_JVM_INLINE_ANNOTATION
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter // LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter
inline class ICIntArray<T: Int>(val value: Array<T>) inline class ICIntArray<T: Int>(val value: Array<T>)
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter // LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter
// IGNORE_BACKEND: JVM // IGNORE_BACKEND: JVM
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter // LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter
// IGNORE_BACKEND: JVM // IGNORE_BACKEND: JVM
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter // LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter
// IGNORE_BACKED: JVM // IGNORE_BACKED: JVM
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter // LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter
// IGNORE_BACKED: JVM // IGNORE_BACKED: JVM
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter // LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter
inline class ICString<T: String>(val value: T) inline class ICString<T: String>(val value: T)
@@ -4,6 +4,7 @@
// LAMBDAS: INDY // LAMBDAS: INDY
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_SIGNATURES // WITH_SIGNATURES
// CHECK_BYTECODE_TEXT // CHECK_BYTECODE_TEXT
@@ -3,6 +3,7 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY // SAM_CONVERSIONS: INDY
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_SIGNATURES // WITH_SIGNATURES
// CHECK_BYTECODE_TEXT // CHECK_BYTECODE_TEXT
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// !JVM_DEFAULT_MODE: all-compatibility // !JVM_DEFAULT_MODE: all-compatibility
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// !JVM_DEFAULT_MODE: all-compatibility // !JVM_DEFAULT_MODE: all-compatibility
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// !JVM_DEFAULT_MODE: all-compatibility // !JVM_DEFAULT_MODE: all-compatibility
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND_FIR: JVM_IR
// FIR status: questionable bytecode listing difference (open/final methods in final class) // FIR status: questionable bytecode listing difference (open/final methods in final class)
// !JVM_DEFAULT_MODE: all-compatibility // !JVM_DEFAULT_MODE: all-compatibility
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// !JVM_DEFAULT_MODE: all // !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// !JVM_DEFAULT_MODE: all // !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -3,6 +3,7 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
@JvmDefaultWithCompatibility @JvmDefaultWithCompatibility
interface Test { interface Test {
@@ -3,6 +3,7 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
@JvmDefaultWithCompatibility @JvmDefaultWithCompatibility
interface Test { interface Test {
@@ -3,6 +3,7 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// FILE: KBase.kt // FILE: KBase.kt
public interface KBase { public interface KBase {
@@ -3,6 +3,7 @@
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// WITH_STDLIB // WITH_STDLIB
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
annotation class MyAnn annotation class MyAnn
@@ -3,6 +3,7 @@
// IGNORE_BACKEND: JVM // IGNORE_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_COROUTINES // WITH_COROUTINES
// WITH_STDLIB // WITH_STDLIB
import helpers.* import helpers.*
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// WITH_STDLIB // WITH_STDLIB
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND_FIR: JVM_IR
// FIR status: NCDFE: Foo$DefaultImpls // FIR status: NCDFE: Foo$DefaultImpls
@@ -11,6 +11,7 @@ fun test(foo: Foo): String {
} }
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// - there should be no synthetic accessor generated in 'Foo' // - there should be no synthetic accessor generated in 'Foo'
class Foo(val s: String) class Foo(val s: String)
@@ -4,6 +4,7 @@
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses +ContextReceivers // LANGUAGE: +ValueClasses +ContextReceivers
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
@JvmInline @JvmInline
value class IC(val x: UInt) value class IC(val x: UInt)
+1
View File
@@ -1,6 +1,7 @@
// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND_FIR: JVM_IR
// https://youtrack.jetbrains.com/issue/KT-52236/Different-modality-in-psi-and-fir // https://youtrack.jetbrains.com/issue/KT-52236/Different-modality-in-psi-and-fir
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// IGNORE_BACKEND: ANDROID, ANDROID_IR // IGNORE_BACKEND: ANDROID, ANDROID_IR
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -5,6 +5,7 @@
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses // LANGUAGE: +ValueClasses
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
OPTIONAL_JVM_INLINE_ANNOTATION OPTIONAL_JVM_INLINE_ANNOTATION
value class F1(val x: Int) value class F1(val x: Int)
@@ -3,6 +3,7 @@
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses // LANGUAGE: +ValueClasses
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
@JvmInline @JvmInline
value class DPoint(val x: Double, val y: Double) value class DPoint(val x: Double, val y: Double)
@@ -5,6 +5,7 @@
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses // LANGUAGE: +ValueClasses
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
interface AbstractPoint<T> { interface AbstractPoint<T> {
val x: T val x: T
@@ -5,6 +5,7 @@
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses // LANGUAGE: +ValueClasses
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
interface AbstractPoint<T> { interface AbstractPoint<T> {
val x: T val x: T
@@ -6,6 +6,7 @@
// LANGUAGE: +ValueClasses // LANGUAGE: +ValueClasses
// LANGUAGE: +GenericInlineClassParameter // LANGUAGE: +GenericInlineClassParameter
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
interface AbstractPoint<T> { interface AbstractPoint<T> {
val x: T val x: T
@@ -3,6 +3,7 @@
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses // LANGUAGE: +ValueClasses
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
@JvmInline @JvmInline
value class DPoint(val x: Double, val y: Double) value class DPoint(val x: Double, val y: Double)
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -1,5 +1,6 @@
// NO_CHECK_LAMBDA_INLINING // NO_CHECK_LAMBDA_INLINING
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// FILE: 1.kt // FILE: 1.kt
package test package test
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// FILE: 1.kt // FILE: 1.kt
package test package test
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// FILE: 1.kt // FILE: 1.kt
package test package test
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -1,4 +1,5 @@
// CHECK_BYTECODE_LISTING // CHECK_BYTECODE_LISTING
// FIR_IDENTICAL
// WITH_STDLIB // WITH_STDLIB
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS // WORKS_WHEN_VALUE_CLASS
@@ -10,8 +10,10 @@ import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.CHECK_BYTECODE_LISTING import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.CHECK_BYTECODE_LISTING
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.IGNORE_ANNOTATIONS import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.IGNORE_ANNOTATIONS
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.WITH_SIGNATURES import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.WITH_SIGNATURES
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.FIR_IDENTICAL
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.model.BinaryArtifacts import org.jetbrains.kotlin.test.model.BinaryArtifacts
import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.defaultsProvider import org.jetbrains.kotlin.test.services.defaultsProvider
@@ -42,10 +44,12 @@ class BytecodeListingHandler(testServices: TestServices) : JvmBinaryArtifactHand
if (multiModuleInfoDumper.isEmpty()) return if (multiModuleInfoDumper.isEmpty()) return
val sourceFile = testServices.moduleStructure.originalTestDataFiles.first() val sourceFile = testServices.moduleStructure.originalTestDataFiles.first()
val defaultTxtFile = sourceFile.withExtension(".txt") val extension =
if (testServices.defaultsProvider.defaultFrontend == FrontendKinds.FIR && FIR_IDENTICAL !in testServices.moduleStructure.allDirectives) ".fir.txt" else ".txt"
val defaultTxtFile = sourceFile.withExtension(extension)
val isIr = testServices.defaultsProvider.defaultTargetBackend?.isIR == true val isIr = testServices.defaultsProvider.defaultTargetBackend?.isIR == true
val txtFile = val txtFile =
if (isIr) sourceFile.withSuffixAndExtension("_ir", ".txt").takeIf(File::exists) ?: defaultTxtFile if (isIr) sourceFile.withSuffixAndExtension("_ir", extension).takeIf(File::exists) ?: defaultTxtFile
else defaultTxtFile else defaultTxtFile
assertions.assertEqualsToFile(txtFile, multiModuleInfoDumper.generateResultingDump()) assertions.assertEqualsToFile(txtFile, multiModuleInfoDumper.generateResultingDump())