From 215556511efc88aada37a41eb83c54ce8d4a1fde Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Sat, 30 Jan 2021 05:59:30 +0300 Subject: [PATCH] JVM_IR: synchronization in InlineCodegen --- .../jetbrains/kotlin/codegen/inline/InlineCodegen.kt | 9 --------- .../kotlin/codegen/inline/inlineCodegenUtils.kt | 10 ++++++++++ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt index ef9a709cdc4..79dc8206a27 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.codegen.inline import com.intellij.psi.PsiElement -import com.intellij.util.ArrayUtil import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.codegen.* import org.jetbrains.kotlin.codegen.AsmUtil.isPrimitive @@ -599,14 +598,6 @@ abstract class InlineCodegen( return (directMember as? ImportedFromObjectCallableDescriptor<*>)?.callableFromObject ?: directMember } - private fun cloneMethodNode(methodNode: MethodNode): MethodNode { - methodNode.instructions.resetLabels() - return MethodNode( - Opcodes.API_VERSION, methodNode.access, methodNode.name, methodNode.desc, methodNode.signature, - ArrayUtil.toStringArray(methodNode.exceptions) - ).also(methodNode::accept) - } - private fun doCreateMethodNodeFromCompiled( callableDescriptor: CallableMemberDescriptor, state: GenerationState, diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt index c090f200925..1e9eca5483e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt @@ -625,3 +625,13 @@ fun MethodNode.preprocessSuspendMarkers(forInline: Boolean, keepFakeContinuation } } } + +fun cloneMethodNode(methodNode: MethodNode): MethodNode { + synchronized(methodNode) { + methodNode.instructions.resetLabels() + return MethodNode( + Opcodes.API_VERSION, methodNode.access, methodNode.name, methodNode.desc, methodNode.signature, + methodNode.exceptions.toTypedArray() + ).also(methodNode::accept) + } +}