From d84a6fa7423dbd5ebbd3f1d3c14afde867bf828e Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 18 Sep 2019 12:41:00 +0200 Subject: [PATCH] JVM IR: always generate inline class constructor with name 'constructor-impl' Previously it was 'constructor-' + hash in case inline class property is of inline class type. No new tests added because this change fixes the constructor name in `bytecodeListing/inlineClasses/inlineClassWithInlineClassUnderlyingType.kt`, which is now failing due to other reasons. #KT-37041 Fixed #KT-37186 --- .../backend/jvm/lower/inlineclasses/InlineClassAbi.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt index b9b9310de60..ec532213f4c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/InlineClassAbi.kt @@ -54,6 +54,14 @@ object InlineClassAbi { * to avoid clashes between overloaded methods. */ fun mangledNameFor(irFunction: IrFunction): Name { + if (irFunction is IrConstructor) { + // Note that we might drop this convention and use standard mangling for constructors too, see KT-37186. + assert(irFunction.constructedClass.isInline) { + "Should not mangle names of non-inline class constructors: ${irFunction.render()}" + } + return Name.identifier("constructor-impl") + } + val suffix = when { irFunction.fullValueParameterList.any { it.type.requiresMangling } -> hashSuffix(irFunction) @@ -62,8 +70,6 @@ object InlineClassAbi { } val base = when { - irFunction is IrConstructor -> - "constructor" irFunction.isGetter -> JvmAbi.getterName(irFunction.propertyName.asString()) irFunction.isSetter ->