diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt index fc0f65ee207..1724d7e1dc6 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.konan.descriptors.vtableSize import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrProperty @@ -102,6 +103,9 @@ internal interface ContextUtils { val FunctionDescriptor.llvmFunction: LLVMValueRef get() { assert (this.kind.isReal) + if (this is TypeAliasConstructorDescriptor) { + return this.underlyingConstructorDescriptor.llvmFunction + } val globalName = this.symbolName val module = context.llvmModule diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index fea79580d6f..061294d1616 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -587,6 +587,12 @@ internal class CodeGeneratorVisitor(val context: Context) : IrElementVisitorVoid //-------------------------------------------------------------------------// + override fun visitTypeAlias(declaration: IrTypeAlias) { + // Nothing to do. + } + + //-------------------------------------------------------------------------// + override fun visitProperty(declaration: IrProperty) { declaration.acceptChildrenVoid(this) } @@ -1663,7 +1669,7 @@ internal class CodeGeneratorVisitor(val context: Context) : IrElementVisitorVoid when (descriptor) { is IrBuiltinOperatorDescriptorBase -> return evaluateOperatorCall (callee, args) - is ClassConstructorDescriptor -> return evaluateConstructorCall (callee, args) + is ConstructorDescriptor -> return evaluateConstructorCall (callee, args) else -> return evaluateSimpleFunctionCall(descriptor, args) } } @@ -1728,10 +1734,10 @@ internal class CodeGeneratorVisitor(val context: Context) : IrElementVisitorVoid private fun evaluateConstructorCall(callee: IrCall, args: List): LLVMValueRef { context.log("evaluateConstructorCall : ${ir2string(callee)}") memScoped { - val containingClass = (callee.descriptor as ClassConstructorDescriptor).containingDeclaration - val typeInfo = codegen.typeInfoValue(containingClass) + val constructedClass = (callee.descriptor as ConstructorDescriptor).constructedClass + val typeInfo = codegen.typeInfoValue(constructedClass) val allocHint = Int32(1).llvm - val thisValue = if (containingClass.isArray) { + val thisValue = if (constructedClass.isArray) { assert(args.size >= 1 && args[0].type == int32Type) val allocArrayInstanceArgs = listOf(typeInfo, allocHint, args[0]) call(context.llvm.allocArrayFunction, allocArrayInstanceArgs) diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 2862fd98bdd..99331dfdbae 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -143,6 +143,11 @@ task safe_cast(type: RunKonanTest) { source = "codegen/basics/safe_cast.kt" } +task typealias1(type: RunKonanTest) { + goldValue = "42\n" + source = "codegen/basics/typealias1.kt" +} + task aritmetic(type: RunKonanTest) { source = "codegen/function/arithmetic.kt" } diff --git a/backend.native/tests/codegen/basics/typealias1.kt b/backend.native/tests/codegen/basics/typealias1.kt new file mode 100644 index 00000000000..b7d93d724ff --- /dev/null +++ b/backend.native/tests/codegen/basics/typealias1.kt @@ -0,0 +1,6 @@ +fun main(args: Array) { + println(Bar(42).x) +} + +class Foo(val x: Int) +typealias Bar = Foo \ No newline at end of file