From 22f9a6ce08a6f00d6e63cb107e37af05a6a16d59 Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov Date: Wed, 22 Aug 2018 15:51:58 +0300 Subject: [PATCH] Add coroutines debug metadata: compiler #KT-25557 Fixed #KT-25559 Fixed --- .../codegen/coroutines/CoroutineCodegen.kt | 7 +- .../CoroutineTransformerMethodVisitor.kt | 74 +++++++++++- .../SuspendFunctionGenerationStrategy.kt | 3 +- .../coroutines/coroutineCodegenUtil.kt | 8 +- .../inline/AnonymousObjectTransformer.kt | 7 +- .../box/coroutines/debug/debuggerMetadata.kt | 109 ++++++++++++++++++ .../coroutines/debug/runtimeDebugMetadata.kt | 71 ++++++++++++ .../box/coroutines/noStdLib/crossinline.txt | 30 +++-- .../tailCallOptimizations/crossinline.txt | 30 +++-- .../inlineWithStateMachine.txt | 7 +- .../inlineWithoutStateMachine.txt | 4 +- .../tailCallOptimizations/simple.txt | 1 + .../tailCallOptimizations/whenUnit.txt | 1 + .../coroutineContextIntrinsic_1_3.txt | 3 +- .../bytecodeListing/coroutineFields_1_3.txt | 7 +- .../bytecodeListing/oomInReturnUnit_1_3.txt | 3 +- .../tailcall/tailSuspendUnitFun_1_3.txt | 16 ++- .../tailcall/tryCatchTailCall_1_3.txt | 3 +- .../tailcall/unreachable_1_3.txt | 16 ++- .../codegen/BlackBoxCodegenTestGenerated.java | 23 ++++ .../LightAnalysisModeTestGenerated.java | 23 ++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 23 ++++ .../IrJsCodegenBoxTestGenerated.java | 13 +++ .../semantics/JsCodegenBoxTestGenerated.java | 13 +++ 24 files changed, 443 insertions(+), 52 deletions(-) create mode 100644 compiler/testData/codegen/box/coroutines/debug/debuggerMetadata.kt create mode 100644 compiler/testData/codegen/box/coroutines/debug/runtimeDebugMetadata.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt index c1fb550a432..7ef27ea3f79 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt @@ -432,7 +432,8 @@ class CoroutineCodegenForLambda private constructor( shouldPreserveClassInitialization = constructorCallNormalizationMode.shouldPreserveClassInitialization, containingClassInternalName = v.thisName, isForNamedFunction = false, - languageVersionSettings = languageVersionSettings + languageVersionSettings = languageVersionSettings, + sourceFile = element.containingFile.name ) } @@ -511,7 +512,7 @@ class CoroutineCodegenForNamedFunction private constructor( v.newField( JvmDeclarationOrigin.NO_ORIGIN, Opcodes.ACC_SYNTHETIC or AsmUtil.NO_FLAG_PACKAGE_PRIVATE, - DATA_FIELD_NAME, AsmTypes.OBJECT_TYPE.descriptor, null, null + languageVersionSettings.dataFieldName(), AsmTypes.OBJECT_TYPE.descriptor, null, null ) if (!languageVersionSettings.isReleaseCoroutines()) { @@ -529,7 +530,7 @@ class CoroutineCodegenForNamedFunction private constructor( object : FunctionGenerationStrategy.CodegenBased(state) { override fun doGenerateBody(codegen: ExpressionCodegen, signature: JvmMethodSignature) { StackValue.field( - AsmTypes.OBJECT_TYPE, Type.getObjectType(v.thisName), DATA_FIELD_NAME, false, + AsmTypes.OBJECT_TYPE, Type.getObjectType(v.thisName), languageVersionSettings.dataFieldName(), false, StackValue.LOCAL_0 ).store(StackValue.local(1, AsmTypes.OBJECT_TYPE), codegen.v) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt index d8782483a7e..69d663a6742 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt @@ -47,10 +47,13 @@ class CoroutineTransformerMethodVisitor( private val shouldPreserveClassInitialization: Boolean, private val lineNumber: Int, private val languageVersionSettings: LanguageVersionSettings, + private val sourceFile: String, // It's only matters for named functions, may differ from '!isStatic(access)' in case of DefaultImpls private val needDispatchReceiver: Boolean = false, // May differ from containingClassInternalName in case of DefaultImpls - private val internalNameForDispatchReceiver: String? = null + private val internalNameForDispatchReceiver: String? = null, + // For crossinline lambdas we do not generate DebugMetadata annotation, otherwise it will be generated twice + private val isCrossinlineLambda: Boolean = false ) : TransformationMethodVisitor(delegate, access, name, desc, signature, exceptions) { private val classBuilderForCoroutineState: ClassBuilder by lazy(obtainClassBuilderForCoroutineState) @@ -109,7 +112,7 @@ class CoroutineTransformerMethodVisitor( UninitializedStoresProcessor(methodNode, shouldPreserveClassInitialization).run() - spillVariables(suspensionPoints, methodNode) + val spilledToVariableMapping = spillVariables(suspensionPoints, methodNode) val suspendMarkerVarIndex = methodNode.maxLocals++ @@ -118,9 +121,9 @@ class CoroutineTransformerMethodVisitor( } val defaultLabel = LabelNode() + val tableSwitchLabel = LabelNode() methodNode.instructions.apply { val startLabel = LabelNode() - val tableSwitchLabel = LabelNode() // tableswitch(this.label) insertBefore( @@ -164,6 +167,45 @@ class CoroutineTransformerMethodVisitor( defaultLabel ) } + + if (languageVersionSettings.isReleaseCoroutines() && !isCrossinlineLambda) { + val suspensionPointLabelNodes = listOf(tableSwitchLabel) + suspensionPointLabels.map { + it.label.info.safeAs() + .sure { "suspensionPointLabel shall have valid info. Check state-machine generation." } + } + writeDebugMetadata(methodNode, suspensionPointLabelNodes, spilledToVariableMapping) + } + } + + private fun writeDebugMetadata( + methodNode: MethodNode, + suspensionPointLabels: List, + spilledToLocalMapping: List> + ) { + val lines = suspensionPointLabels.map { label -> + label.safeAs()?.findNextOrNull { it is LineNumberNode }.safeAs()?.line ?: -1 + } + val metadata = classBuilderForCoroutineState.newAnnotation(DEBUG_METADATA_ANNOTATION_ASM_TYPE.descriptor, true) + // TODO: support inlined functions (similar to SMAP) + metadata.visitArray("sourceFiles").also { v -> + lines.forEach { v.visit(null, sourceFile) } + }.visitEnd() + metadata.visit("lineNumbers", lines.toIntArray()) + + val debugIndexToLabel = spilledToLocalMapping.withIndex().flatMap { (labelIndex, list) -> + list.map { labelIndex } + } + val variablesMapping = spilledToLocalMapping.flatten() + metadata.visit("indexToLabel", debugIndexToLabel.toIntArray()) + metadata.visitArray("spilled").also { v -> + variablesMapping.forEach { v.visit(null, it.fieldName) } + }.visitEnd() + metadata.visitArray("localNames").also { v -> + variablesMapping.forEach { v.visit(null, it.variableName) } + }.visitEnd() + metadata.visit("methodName", methodNode.name) + metadata.visit("className", containingClassInternalName) + metadata.visitEnd() } private fun addContinuationToLvt(methodNode: MethodNode, startLabel: LabelNode, endLabel: LabelNode) { @@ -307,7 +349,7 @@ class CoroutineTransformerMethodVisitor( visitLabel(afterCoroutineStateCreated) visitVarInsn(Opcodes.ALOAD, continuationIndex) - getfield(classBuilderForCoroutineState.thisName, DATA_FIELD_NAME, AsmTypes.OBJECT_TYPE.descriptor) + getfield(classBuilderForCoroutineState.thisName, languageVersionSettings.dataFieldName(), AsmTypes.OBJECT_TYPE.descriptor) visitVarInsn(Opcodes.ASTORE, dataIndex) if (!languageVersionSettings.isReleaseCoroutines()) { @@ -364,7 +406,7 @@ class CoroutineTransformerMethodVisitor( } } - private fun spillVariables(suspensionPoints: List, methodNode: MethodNode) { + private fun spillVariables(suspensionPoints: List, methodNode: MethodNode): List> { val instructions = methodNode.instructions val frames = performRefinedTypeAnalysis(methodNode, containingClassInternalName) fun AbstractInsnNode.index() = instructions.indexOf(this) @@ -373,6 +415,7 @@ class CoroutineTransformerMethodVisitor( val postponedActions = mutableListOf<() -> Unit>() val maxVarsCountByType = mutableMapOf() val livenessFrames = analyzeLiveness(methodNode) + val spilledToVariableMapping = arrayListOf>() for (suspension in suspensionPoints) { val suspensionCallBegin = suspension.suspensionCallBegin @@ -399,6 +442,8 @@ class CoroutineTransformerMethodVisitor( // NB: it's also rather useful for sake of optimization val livenessFrame = livenessFrames[suspensionCallBegin.index()] + val spilledToVariable = arrayListOf() + // 0 - this // 1 - parameter // ... @@ -434,6 +479,8 @@ class CoroutineTransformerMethodVisitor( varsCountByType[normalizedType] = indexBySort val fieldName = normalizedType.fieldNameForVar(indexBySort) + localVariableName(methodNode, index, suspension.suspensionCallEnd.next.index()) + ?.let { spilledToVariable.add(SpilledVariableDescriptor(fieldName, it)) } postponedActions.add { with(instructions) { @@ -456,6 +503,8 @@ class CoroutineTransformerMethodVisitor( } } + spilledToVariableMapping.add(spilledToVariable) + varsCountByType.forEach { maxVarsCountByType[it.key] = Math.max(maxVarsCountByType[it.key] ?: 0, it.value) } @@ -472,6 +521,19 @@ class CoroutineTransformerMethodVisitor( ) } } + return spilledToVariableMapping + } + + private fun localVariableName( + methodNode: MethodNode, + index: Int, + suspensionCallIndex: Int + ): String? { + val variable = methodNode.localVariables.find { + index == it.index && methodNode.instructions.indexOf(it.start) <= suspensionCallIndex + && suspensionCallIndex < methodNode.instructions.indexOf(it.end) + } + return variable?.name } /** @@ -637,6 +699,8 @@ class CoroutineTransformerMethodVisitor( return } + + private data class SpilledVariableDescriptor(val fieldName: String, val variableName: String) } internal fun InstructionAdapter.generateContinuationConstructorCall( diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SuspendFunctionGenerationStrategy.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SuspendFunctionGenerationStrategy.kt index dc218ee3563..20385d27f98 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SuspendFunctionGenerationStrategy.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/SuspendFunctionGenerationStrategy.kt @@ -70,7 +70,8 @@ open class SuspendFunctionGenerationStrategy( shouldPreserveClassInitialization = constructorCallNormalizationMode.shouldPreserveClassInitialization, needDispatchReceiver = originalSuspendDescriptor.dispatchReceiverParameter != null, internalNameForDispatchReceiver = containingClassInternalNameOrNull(), - languageVersionSettings = languageVersionSettings + languageVersionSettings = languageVersionSettings, + sourceFile = declaration.containingFile.name ) } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt index d7751f61d72..6eabe588184 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt @@ -54,20 +54,26 @@ const val COROUTINE_LABEL_FIELD_NAME = "label" const val SUSPEND_FUNCTION_CREATE_METHOD_NAME = "create" const val DO_RESUME_METHOD_NAME = "doResume" const val INVOKE_SUSPEND_METHOD_NAME = "invokeSuspend" -const val DATA_FIELD_NAME = "data" const val EXCEPTION_FIELD_NAME = "exception" +private val RELEASE_COROUTINES_VERSION_SETTINGS = LanguageVersionSettingsImpl(LanguageVersion.KOTLIN_1_3, ApiVersion.KOTLIN_1_3) + fun LanguageVersionSettings.isResumeImplMethodName(name: String) = if (isReleaseCoroutines()) name == INVOKE_SUSPEND_METHOD_NAME else name == DO_RESUME_METHOD_NAME +fun LanguageVersionSettings.dataFieldName(): String = if (isReleaseCoroutines()) "result" else "data" + fun isResumeImplMethodNameFromAnyLanguageSettings(name: String) = name == INVOKE_SUSPEND_METHOD_NAME || name == DO_RESUME_METHOD_NAME fun LanguageVersionSettings.coroutinesJvmInternalPackageFqName() = coroutinesPackageFqName().child(Name.identifier("jvm")).child(Name.identifier("internal")) +val DEBUG_METADATA_ANNOTATION_ASM_TYPE = RELEASE_COROUTINES_VERSION_SETTINGS.coroutinesJvmInternalPackageFqName() + .child(Name.identifier("DebugMetadata")).topLevelClassAsmType() + fun LanguageVersionSettings.continuationAsmType() = continuationInterfaceFqName().topLevelClassAsmType() diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt index 5a2b2dfb760..3329b810532 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.kt @@ -452,7 +452,9 @@ class AnonymousObjectTransformer( languageVersionSettings = languageVersionSettings, shouldPreserveClassInitialization = state.constructorCallNormalizationMode.shouldPreserveClassInitialization, containingClassInternalName = builder.thisName, - isForNamedFunction = false + isForNamedFunction = false, + sourceFile = sourceInfo ?: "", + isCrossinlineLambda = inliningContext.isContinuation ) } } @@ -481,7 +483,8 @@ class AnonymousObjectTransformer( containingClassInternalName = builder.thisName, isForNamedFunction = true, needDispatchReceiver = true, - internalNameForDispatchReceiver = builder.thisName + internalNameForDispatchReceiver = builder.thisName, + sourceFile = sourceInfo ?: "" ) } } diff --git a/compiler/testData/codegen/box/coroutines/debug/debuggerMetadata.kt b/compiler/testData/codegen/box/coroutines/debug/debuggerMetadata.kt new file mode 100644 index 00000000000..4642b37b5ec --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/debug/debuggerMetadata.kt @@ -0,0 +1,109 @@ +// !LANGUAGE: +ReleaseCoroutines + +// IGNORE_BACKEND: JVM_IR +// TARGET_BACKEND: JVM +// WITH_RUNTIME +// WITH_COROUTINES + +@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER", "CANNOT_OVERRIDE_INVISIBLE_MEMBER") + +import helpers.* +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* +import kotlin.coroutines.jvm.internal.* + +suspend fun getSpilledToVariable() = suspendCoroutineUninterceptedOrReturn> { + (it as BaseContinuationImpl).getSpilledVariableFieldMapping() +} + +fun Array.toMap(): Map { + val res = hashMapOf() + for (i in 0..(size - 1) step 2) { + res[get(i)] = get(i + 1) + } + return res +} + +var continuation: Continuation? = null + +suspend fun suspendHere() = suspendCoroutineUninterceptedOrReturn { + continuation = it + COROUTINE_SUSPENDED +} + +suspend fun dummy() {} + +suspend fun named(): String { + dummy() + val s1 = "" + val s2 = "" + val s3 = "" + val s4 = "" + val s5 = "" + val s6 = "" + val s7 = "" + val s8 = "" + val s9 = "" + val map = getSpilledToVariable().toMap() + return map["L$0"] + map["L$1"] + map["L$2"] + map["L$3"] + map["L$4"] + map["L$5"] + map["L$6"] + map["L$7"] + map["L$8"] +} + +suspend fun suspended() { + dummy() + val ss = "" + suspendHere() +} + +suspend fun multipleLocalsInOneSlot() { + for (first in 0 until 1) { + suspendHere() + } + for (second in 0 until 1) { + suspendHere() + } +} + +fun builder(c: suspend () -> Unit) { + c.startCoroutine(EmptyContinuation) +} + +fun box(): String { + var res: String = "" + builder { + res = named() + } + if (res != "s1s2s3s4s5s6s7s8s9") { + return "" + res + } + builder { + dummy() + val a = "" + res = getSpilledToVariable().toMap()["L$0"] ?: "lambda fail" + } + if (res != "a") { + return "" + res + } + + builder { + suspended() + } + res = (continuation!! as BaseContinuationImpl).getSpilledVariableFieldMapping().toMap()["L$0"] ?: "suspended fail" + if (res != "ss") { + return "" + res + } + + builder { + multipleLocalsInOneSlot() + } + res = (continuation!! as BaseContinuationImpl).getSpilledVariableFieldMapping().toMap()["I$0"] ?: "multipleLocalsInOneSlot fail 1" + if (res != "first") { + return "" + res + } + continuation!!.resumeWith(SuccessOrFailure.success(Unit)) + res = (continuation!! as BaseContinuationImpl).getSpilledVariableFieldMapping().toMap()["I$0"] ?: "multipleLocalsInOneSlot fail 2" + if (res != "second") { + return "" + res + } + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/coroutines/debug/runtimeDebugMetadata.kt b/compiler/testData/codegen/box/coroutines/debug/runtimeDebugMetadata.kt new file mode 100644 index 00000000000..150cb759e8d --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/debug/runtimeDebugMetadata.kt @@ -0,0 +1,71 @@ +// !LANGUAGE: +ReleaseCoroutines + +// IGNORE_BACKEND: JVM_IR +// TARGET_BACKEND: JVM +// WITH_RUNTIME +// FULL_JDK +// WITH_COROUTINES + +@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER", "CANNOT_OVERRIDE_INVISIBLE_MEMBER") + +import helpers.* +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* +import kotlin.coroutines.jvm.internal.* + +private fun BaseContinuationImpl.getSourceFileAndLineNumber(): Pair { + return (getStackTraceElement()?.fileName ?: "") to (getStackTraceElement()?.lineNumber ?: -1) +} + +suspend fun getSourceFileAndLineNumberFromContinuation() = suspendCoroutineUninterceptedOrReturn> { + (it as BaseContinuationImpl).getSourceFileAndLineNumber() +} + +var continuation: Continuation<*>? = null + +suspend fun suspendHere() = suspendCoroutineUninterceptedOrReturn { + continuation = it + COROUTINE_SUSPENDED +} + +suspend fun dummy() {} + +suspend fun named(): Pair { + dummy() + return getSourceFileAndLineNumberFromContinuation() +} + +suspend fun suspended() { + dummy() + suspendHere() +} + +fun builder(c: suspend () -> Unit) { + c.startCoroutine(EmptyContinuation) +} + +fun box(): String { + var res: Any? = null + builder { + res = named() + } + if (res != Pair("runtimeDebugMetadata.kt", 35)) { + return "" + res + } + builder { + dummy() + res = getSourceFileAndLineNumberFromContinuation() + } + if (res != Pair("runtimeDebugMetadata.kt", 57)) { + return "" + res + } + + builder { + suspended() + } + res = (continuation!! as BaseContinuationImpl).getSourceFileAndLineNumber() + if (res != Pair("runtimeDebugMetadata.kt", 40)) { + return "" + res + } + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/coroutines/noStdLib/crossinline.txt b/compiler/testData/codegen/box/coroutines/noStdLib/crossinline.txt index 0451952d66a..52561384998 100644 --- a/compiler/testData/codegen/box/coroutines/noStdLib/crossinline.txt +++ b/compiler/testData/codegen/box/coroutines/noStdLib/crossinline.txt @@ -1,4 +1,5 @@ @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 { field L$0: java.lang.Object field L$1: java.lang.Object @@ -6,8 +7,8 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 { field L$3: java.lang.Object field L$4: java.lang.Object field L$5: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$1 @@ -15,14 +16,15 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 { public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 { field L$0: java.lang.Object field L$1: java.lang.Object field L$2: java.lang.Object field L$3: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 @@ -53,8 +55,8 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1 { @kotlin.Metadata public final class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$fold$$inlined$consumeEach$1 inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1 inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 @@ -73,6 +75,7 @@ public final class CrossinlineKt$box$1$fold$$inlined$consumeEach$1 { public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 { field L$0: java.lang.Object @@ -81,8 +84,8 @@ public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 { field L$3: java.lang.Object field L$4: java.lang.Object field L$5: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1 inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1 inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 @@ -90,14 +93,15 @@ public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 { public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2$1 { field L$0: java.lang.Object field L$1: java.lang.Object field L$2: java.lang.Object field L$3: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2 inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2 inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2$1 @@ -135,6 +139,7 @@ public final class CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1 { public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata final class CrossinlineKt$box$1 { synthetic final field $res: kotlin.jvm.internal.Ref$IntRef @@ -153,8 +158,8 @@ final class CrossinlineKt$box$1 { @kotlin.Metadata public final class CrossinlineKt$consumeEach$2$send$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$consumeEach$2 inner class CrossinlineKt$consumeEach$2 inner class CrossinlineKt$consumeEach$2$send$1 @@ -173,6 +178,7 @@ public final class CrossinlineKt$consumeEach$2 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata public final class CrossinlineKt$filter$$inlined$source$1$1 { field L$0: java.lang.Object field L$1: java.lang.Object @@ -180,8 +186,8 @@ public final class CrossinlineKt$filter$$inlined$source$1$1 { field L$3: java.lang.Object field L$4: java.lang.Object field L$5: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1 inner class CrossinlineKt$filter$$inlined$source$1 inner class CrossinlineKt$filter$$inlined$source$1$1 @@ -189,14 +195,15 @@ public final class CrossinlineKt$filter$$inlined$source$1$1 { public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata public final class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 { field L$0: java.lang.Object field L$1: java.lang.Object field L$2: java.lang.Object field L$3: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 @@ -227,8 +234,8 @@ public final class CrossinlineKt$filter$$inlined$source$1 { @kotlin.Metadata public final class CrossinlineKt$fold$$inlined$consumeEach$1$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$fold$$inlined$consumeEach$1 inner class CrossinlineKt$fold$$inlined$consumeEach$1 inner class CrossinlineKt$fold$$inlined$consumeEach$1$1 @@ -248,6 +255,7 @@ public final class CrossinlineKt$fold$$inlined$consumeEach$1 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata public final class CrossinlineKt$range$$inlined$source$1$1 { field I$0: int field L$0: java.lang.Object @@ -255,8 +263,8 @@ public final class CrossinlineKt$range$$inlined$source$1$1 { field L$2: java.lang.Object field L$3: java.lang.Object field L$4: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$range$$inlined$source$1 inner class CrossinlineKt$range$$inlined$source$1 inner class CrossinlineKt$range$$inlined$source$1$1 @@ -276,8 +284,8 @@ public final class CrossinlineKt$range$$inlined$source$1 { @kotlin.Metadata public final class CrossinlineKt$source$1$consume$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$source$1 inner class CrossinlineKt$source$1 inner class CrossinlineKt$source$1$consume$1 diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt index 3dd178c4d73..30d3f2f74c6 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/crossinline.txt @@ -1,4 +1,5 @@ @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 { field L$0: java.lang.Object field L$1: java.lang.Object @@ -6,8 +7,8 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 { field L$3: java.lang.Object field L$4: java.lang.Object field L$5: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$1 @@ -15,14 +16,15 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1$1 { public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata public final class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 { field L$0: java.lang.Object field L$1: java.lang.Object field L$2: java.lang.Object field L$3: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$box$1$filter$$inlined$source$1$lambda$1$1 @@ -53,8 +55,8 @@ public final class CrossinlineKt$box$1$filter$$inlined$source$1 { @kotlin.Metadata public final class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$fold$$inlined$consumeEach$1 inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1 inner class CrossinlineKt$box$1$fold$$inlined$consumeEach$1$1 @@ -73,6 +75,7 @@ public final class CrossinlineKt$box$1$fold$$inlined$consumeEach$1 { public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 { field L$0: java.lang.Object @@ -81,8 +84,8 @@ public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 { field L$3: java.lang.Object field L$4: java.lang.Object field L$5: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1 inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1 inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 @@ -90,14 +93,15 @@ public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$1 { public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata public final class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2$1 { field L$0: java.lang.Object field L$1: java.lang.Object field L$2: java.lang.Object field L$3: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2 inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2 inner class CrossinlineKt$box$1$invokeSuspend$$inlined$filter$1$2$1 @@ -135,6 +139,7 @@ public final class CrossinlineKt$box$1$invokeSuspend$$inlined$fold$1 { public @org.jetbrains.annotations.Nullable method send(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata final class CrossinlineKt$box$1 { synthetic final field $res: kotlin.jvm.internal.Ref$IntRef @@ -153,8 +158,8 @@ final class CrossinlineKt$box$1 { @kotlin.Metadata public final class CrossinlineKt$consumeEach$2$send$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$consumeEach$2 inner class CrossinlineKt$consumeEach$2 inner class CrossinlineKt$consumeEach$2$send$1 @@ -173,6 +178,7 @@ public final class CrossinlineKt$consumeEach$2 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata public final class CrossinlineKt$filter$$inlined$source$1$1 { field L$0: java.lang.Object field L$1: java.lang.Object @@ -180,8 +186,8 @@ public final class CrossinlineKt$filter$$inlined$source$1$1 { field L$3: java.lang.Object field L$4: java.lang.Object field L$5: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1 inner class CrossinlineKt$filter$$inlined$source$1 inner class CrossinlineKt$filter$$inlined$source$1$1 @@ -189,14 +195,15 @@ public final class CrossinlineKt$filter$$inlined$source$1$1 { public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata public final class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 { field L$0: java.lang.Object field L$1: java.lang.Object field L$2: java.lang.Object field L$3: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$filter$$inlined$source$1$lambda$1 inner class CrossinlineKt$filter$$inlined$source$1$lambda$1$1 @@ -227,8 +234,8 @@ public final class CrossinlineKt$filter$$inlined$source$1 { @kotlin.Metadata public final class CrossinlineKt$fold$$inlined$consumeEach$1$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$fold$$inlined$consumeEach$1 inner class CrossinlineKt$fold$$inlined$consumeEach$1 inner class CrossinlineKt$fold$$inlined$consumeEach$1$1 @@ -248,6 +255,7 @@ public final class CrossinlineKt$fold$$inlined$consumeEach$1 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata public final class CrossinlineKt$range$$inlined$source$1$1 { field I$0: int field I$1: int @@ -256,8 +264,8 @@ public final class CrossinlineKt$range$$inlined$source$1$1 { field L$2: java.lang.Object field L$3: java.lang.Object field L$4: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$range$$inlined$source$1 inner class CrossinlineKt$range$$inlined$source$1 inner class CrossinlineKt$range$$inlined$source$1$1 @@ -277,8 +285,8 @@ public final class CrossinlineKt$range$$inlined$source$1 { @kotlin.Metadata public final class CrossinlineKt$source$1$consume$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: CrossinlineKt$source$1 inner class CrossinlineKt$source$1 inner class CrossinlineKt$source$1$consume$1 diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine.txt index b72fd34515a..9761a230cec 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithStateMachine.txt @@ -1,3 +1,4 @@ +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata final class InlineWithStateMachineKt$box$1 { synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef @@ -11,22 +12,24 @@ final class InlineWithStateMachineKt$box$1 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class InlineWithStateMachineKt$mainSuspend$1 { field L$0: java.lang.Object field L$1: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class InlineWithStateMachineKt$mainSuspend$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata public final class InlineWithStateMachineKt$suspendHere$1 { field L$0: java.lang.Object field L$1: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class InlineWithStateMachineKt$suspendHere$1 public method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt index 0a77613e718..18ec6c8be64 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/inlineWithoutStateMachine.txt @@ -1,3 +1,4 @@ +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata final class InlineWithoutStateMachineKt$box$1 { synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef @@ -12,11 +13,12 @@ final class InlineWithoutStateMachineKt$box$1 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class InlineWithoutStateMachineKt$complexSuspend$1 { field L$0: java.lang.Object field L$1: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class InlineWithoutStateMachineKt$complexSuspend$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple.txt index d3460b341fd..a55bc191a68 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/simple.txt @@ -1,3 +1,4 @@ +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata final class SimpleKt$box$1 { synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef diff --git a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit.txt b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit.txt index 2958395fcd9..803a4587e0f 100644 --- a/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit.txt +++ b/compiler/testData/codegen/box/coroutines/tailCallOptimizations/whenUnit.txt @@ -1,3 +1,4 @@ +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata final class WhenUnitKt$box$1 { field label: int diff --git a/compiler/testData/codegen/bytecodeListing/coroutineContextIntrinsic_1_3.txt b/compiler/testData/codegen/bytecodeListing/coroutineContextIntrinsic_1_3.txt index a06dc48fcd1..d40d5943917 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutineContextIntrinsic_1_3.txt +++ b/compiler/testData/codegen/bytecodeListing/coroutineContextIntrinsic_1_3.txt @@ -1,7 +1,8 @@ @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class CoroutineContextIntrinsicKt$notTailCall$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class CoroutineContextIntrinsicKt$notTailCall$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object diff --git a/compiler/testData/codegen/bytecodeListing/coroutineFields_1_3.txt b/compiler/testData/codegen/bytecodeListing/coroutineFields_1_3.txt index eadb9cb294a..b2500d9f9fd 100644 --- a/compiler/testData/codegen/bytecodeListing/coroutineFields_1_3.txt +++ b/compiler/testData/codegen/bytecodeListing/coroutineFields_1_3.txt @@ -1,8 +1,9 @@ @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class Controller$multipleSuspensions$1 { field L$0: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: Controller inner class Controller$multipleSuspensions$1 method (p0: Controller, p1: kotlin.coroutines.Continuation): void @@ -10,10 +11,11 @@ final class Controller$multipleSuspensions$1 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class Controller$nonTailCall$1 { field L$0: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object synthetic final field this$0: Controller inner class Controller$nonTailCall$1 method (p0: Controller, p1: kotlin.coroutines.Continuation): void @@ -31,6 +33,7 @@ public final class Controller { public final @org.jetbrains.annotations.Nullable method tailCall(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.Continuation): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata final class CoroutineFieldsKt$box$1 { synthetic final field $result: kotlin.jvm.internal.Ref$ObjectRef diff --git a/compiler/testData/codegen/bytecodeListing/oomInReturnUnit_1_3.txt b/compiler/testData/codegen/bytecodeListing/oomInReturnUnit_1_3.txt index a84b217ad88..36e035a3926 100644 --- a/compiler/testData/codegen/bytecodeListing/oomInReturnUnit_1_3.txt +++ b/compiler/testData/codegen/bytecodeListing/oomInReturnUnit_1_3.txt @@ -1,8 +1,9 @@ @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class OomInReturnUnitKt$test$1 { field L$0: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class OomInReturnUnitKt$test$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object diff --git a/compiler/testData/codegen/bytecodeListing/tailcall/tailSuspendUnitFun_1_3.txt b/compiler/testData/codegen/bytecodeListing/tailcall/tailSuspendUnitFun_1_3.txt index b5b31a65964..d06941fcfdb 100644 --- a/compiler/testData/codegen/bytecodeListing/tailcall/tailSuspendUnitFun_1_3.txt +++ b/compiler/testData/codegen/bytecodeListing/tailcall/tailSuspendUnitFun_1_3.txt @@ -5,34 +5,38 @@ public final class Generic { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class TailSuspendUnitFunKt$callsIntNotTailCall$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class TailSuspendUnitFunKt$callsIntNotTailCall$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class TailSuspendUnitFunKt$lambdaAsParameterNotTailCall$1 { field L$0: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class TailSuspendUnitFunKt$lambdaAsParameterNotTailCall$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class TailSuspendUnitFunKt$multipleExitPointsNotTailCall$1 { field Z$0: boolean - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class TailSuspendUnitFunKt$multipleExitPointsNotTailCall$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata final class TailSuspendUnitFunKt$multipleExitPointsWhen$2 { field label: int @@ -44,9 +48,10 @@ final class TailSuspendUnitFunKt$multipleExitPointsWhen$2 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class TailSuspendUnitFunKt$notTailCall$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class TailSuspendUnitFunKt$notTailCall$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object @@ -63,9 +68,10 @@ final class TailSuspendUnitFunKt$useGenericIngerType$2 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class TailSuspendUnitFunKt$useNullableUnit$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class TailSuspendUnitFunKt$useNullableUnit$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object diff --git a/compiler/testData/codegen/bytecodeListing/tailcall/tryCatchTailCall_1_3.txt b/compiler/testData/codegen/bytecodeListing/tailcall/tryCatchTailCall_1_3.txt index c6aa1f7be59..ebbee7374b9 100644 --- a/compiler/testData/codegen/bytecodeListing/tailcall/tryCatchTailCall_1_3.txt +++ b/compiler/testData/codegen/bytecodeListing/tailcall/tryCatchTailCall_1_3.txt @@ -1,7 +1,8 @@ @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class TryCatchTailCallKt$catchException$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class TryCatchTailCallKt$catchException$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object diff --git a/compiler/testData/codegen/bytecodeListing/tailcall/unreachable_1_3.txt b/compiler/testData/codegen/bytecodeListing/tailcall/unreachable_1_3.txt index f489bf3ceef..1f793c60cd1 100644 --- a/compiler/testData/codegen/bytecodeListing/tailcall/unreachable_1_3.txt +++ b/compiler/testData/codegen/bytecodeListing/tailcall/unreachable_1_3.txt @@ -5,34 +5,38 @@ public final class Generic { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class UnreachableKt$callsIntNotTailCall$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class UnreachableKt$callsIntNotTailCall$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class UnreachableKt$lambdaAsParameterNotTailCall$1 { field L$0: java.lang.Object - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class UnreachableKt$lambdaAsParameterNotTailCall$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class UnreachableKt$multipleExitPointsNotTailCall$1 { field Z$0: boolean - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class UnreachableKt$multipleExitPointsNotTailCall$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object } +@kotlin.coroutines.jvm.internal.DebugMetadata @kotlin.Metadata final class UnreachableKt$multipleExitPointsWhen$2 { field label: int @@ -44,9 +48,10 @@ final class UnreachableKt$multipleExitPointsWhen$2 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class UnreachableKt$notTailCall$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class UnreachableKt$notTailCall$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object @@ -63,9 +68,10 @@ final class UnreachableKt$useGenericInferType$2 { } @kotlin.Metadata +@kotlin.coroutines.jvm.internal.DebugMetadata final class UnreachableKt$useNullableUnit$1 { - synthetic field data: java.lang.Object field label: int + synthetic field result: java.lang.Object inner class UnreachableKt$useNullableUnit$1 method (p0: kotlin.coroutines.Continuation): void public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 94fa77e7993..90dc4cd78b6 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -6434,6 +6434,29 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { } } + @TestMetadata("compiler/testData/codegen/box/coroutines/debug") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Debug extends AbstractBlackBoxCodegenTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath); + } + + public void testAllFilesPresentInDebug() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/debug"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); + } + + @TestMetadata("debuggerMetadata.kt") + public void testDebuggerMetadata() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/debug/debuggerMetadata.kt"); + } + + @TestMetadata("runtimeDebugMetadata.kt") + public void testRuntimeDebugMetadata() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/debug/runtimeDebugMetadata.kt"); + } + } + @TestMetadata("compiler/testData/codegen/box/coroutines/featureIntersection") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index fd151886e8e..fc3edafe859 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -6434,6 +6434,29 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes } } + @TestMetadata("compiler/testData/codegen/box/coroutines/debug") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Debug extends AbstractLightAnalysisModeTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath); + } + + public void testAllFilesPresentInDebug() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/debug"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); + } + + @TestMetadata("debuggerMetadata.kt") + public void testDebuggerMetadata() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/debug/debuggerMetadata.kt"); + } + + @TestMetadata("runtimeDebugMetadata.kt") + public void testRuntimeDebugMetadata() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/debug/runtimeDebugMetadata.kt"); + } + } + @TestMetadata("compiler/testData/codegen/box/coroutines/featureIntersection") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 1feee0bda70..1de3f08e9a8 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -6434,6 +6434,29 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes } } + @TestMetadata("compiler/testData/codegen/box/coroutines/debug") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Debug extends AbstractIrBlackBoxCodegenTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath); + } + + public void testAllFilesPresentInDebug() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/debug"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true); + } + + @TestMetadata("debuggerMetadata.kt") + public void testDebuggerMetadata() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/debug/debuggerMetadata.kt"); + } + + @TestMetadata("runtimeDebugMetadata.kt") + public void testRuntimeDebugMetadata() throws Exception { + runTest("compiler/testData/codegen/box/coroutines/debug/runtimeDebugMetadata.kt"); + } + } + @TestMetadata("compiler/testData/codegen/box/coroutines/featureIntersection") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java index 0ab8aac97cc..155dde4d4ed 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java @@ -5619,6 +5619,19 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { } } + @TestMetadata("compiler/testData/codegen/box/coroutines/debug") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Debug extends AbstractIrJsCodegenBoxTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest0(this::doTest, TargetBackend.JS_IR, testDataFilePath); + } + + public void testAllFilesPresentInDebug() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/debug"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS_IR, true); + } + } + @TestMetadata("compiler/testData/codegen/box/coroutines/featureIntersection") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 74279c4c8c4..b79fed04b72 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -6144,6 +6144,19 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { } } + @TestMetadata("compiler/testData/codegen/box/coroutines/debug") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Debug extends AbstractJsCodegenBoxTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest0(this::doTest, TargetBackend.JS, testDataFilePath); + } + + public void testAllFilesPresentInDebug() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/debug"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true); + } + } + @TestMetadata("compiler/testData/codegen/box/coroutines/featureIntersection") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)