From e326b8755f6a46468c44f24190063be932f169c2 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Wed, 24 Oct 2018 15:47:24 +0200 Subject: [PATCH] Fix method inlining problems in 191 branch related to asm upgrade to 7.0 'visitAnnotableParameterCount' is propagating copying node state to destination one that corrupts its state --- .../InlineMethodInstructionAdapter.java | 20 +++++++++++++++++++ .../kotlin/codegen/inline/MethodInliner.kt | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineMethodInstructionAdapter.java diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineMethodInstructionAdapter.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineMethodInstructionAdapter.java new file mode 100644 index 00000000000..b0bc9f8c96e --- /dev/null +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineMethodInstructionAdapter.java @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.codegen.inline; + +import org.jetbrains.org.objectweb.asm.MethodVisitor; +import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; + +public class InlineMethodInstructionAdapter extends InstructionAdapter { + + InlineMethodInstructionAdapter(MethodVisitor methodVisitor) { + super(InlineCodegenUtilsKt.API, methodVisitor); + } + + public void visitAnnotableParameterCount(int parameterCount, boolean visible) { + + } +} \ No newline at end of file diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt index df2e14fb5de..3da161584c0 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.kt @@ -405,7 +405,7 @@ class MethodInliner( node.signature, node.exceptions?.toTypedArray() ) - val transformationVisitor = object : MethodVisitor(API, transformedNode) { + val transformationVisitor = object : InlineMethodInstructionAdapter(transformedNode) { private val GENERATE_DEBUG_INFO = GENERATE_SMAP && inlineOnlySmapSkipper == null private val isInliningLambda = nodeRemapper.isInsideInliningLambda