diff --git a/compiler/testData/codegen/box/arrays/nonLocalReturnArrayConstructor.kt b/compiler/testData/codegen/box/arrays/nonLocalReturnArrayConstructor.kt index f87032e9a3b..dded8539cda 100644 --- a/compiler/testData/codegen/box/arrays/nonLocalReturnArrayConstructor.kt +++ b/compiler/testData/codegen/box/arrays/nonLocalReturnArrayConstructor.kt @@ -1,3 +1,5 @@ +typealias ArrayS = Array + fun testArray() { Array(5) { i -> if (i == 3) return @@ -6,6 +8,14 @@ fun testArray() { throw AssertionError() } +fun testArrayAlias() { + ArrayS(5) { i -> + if (i == 3) return + i.toString() + } + throw AssertionError() +} + fun testIntArray() { IntArray(5) { i -> if (i == 3) return @@ -56,6 +66,7 @@ fun testDoubleArray() { fun box(): String { testArray() + testArrayAlias() testIntArray() testLongArray() testBooleanArray() diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.kt index 0fbc5388d08..3d688519680 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/functions/factories/ArrayFIF.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.builtins.getValueParameterTypesFromFunctionType import org.jetbrains.kotlin.builtins.isBuiltinFunctionalType import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.ConstructorDescriptor +import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor import org.jetbrains.kotlin.js.backend.ast.* import org.jetbrains.kotlin.js.backend.ast.metadata.descriptor import org.jetbrains.kotlin.js.backend.ast.metadata.inlineStrategy @@ -192,8 +193,12 @@ object ArrayFIF : CompositeFIF() { } invocation.inlineStrategy = InlineStrategy.IN_PLACE val descriptor = callInfo.resolvedCall.resultingDescriptor.original - invocation.descriptor = descriptor - context.addInlineCall(descriptor) + val resolvedDescriptor = when (descriptor) { + is TypeAliasConstructorDescriptor -> descriptor.underlyingConstructorDescriptor + else -> descriptor + } + invocation.descriptor = resolvedDescriptor + context.addInlineCall(resolvedDescriptor) invocation } }