From 41197392f9b3b7d90f85fb211bba64426aab2a2d Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Thu, 7 Dec 2023 17:43:00 +0100 Subject: [PATCH] [IR] Mark IrFunctionImpl with an opt-in annotation KT-59318 --- .../ir/declarations/impl/IrFunctionImpl.kt | 6 +- ...BuiltInFictitiousFunctionIrClassFactory.kt | 48 ++++++++++++--- .../kotlin/backend/konan/cgen/CBridgeGen.kt | 41 +++++++------ .../backend/konan/cgen/CBridgeGenUtils.kt | 18 +++--- .../backend/konan/lower/BridgesBuilding.kt | 28 +++++---- .../konan/lower/InitializersLowering.kt | 28 ++++----- .../backend/konan/lower/InteropLowering.kt | 43 +++++++------ .../lower/NativeSuspendFunctionLowering.kt | 60 +++++++++---------- .../backend/konan/lower/TestProcessor.kt | 35 +++++------ .../konan/lower/VolatileFieldsLowering.kt | 1 - 10 files changed, 168 insertions(+), 140 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt index ac41070fdcd..b002fbae2e9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.DescriptorVisibility import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.ir.IrImplementationDetail import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor @@ -21,7 +22,10 @@ import org.jetbrains.kotlin.ir.types.impl.ReturnTypeIsNotInitializedException import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource -class IrFunctionImpl( +// IMPORTANT: This class is used in the Compose IDE plugin (platform 233). +// Don't rename it or change its constructor's signature so as not to break binary compatibility when an older version of +// the Compose IDE plugin is used with a newer version of the Kotlin IDE plugin that vendors the updated compiler version. +class IrFunctionImpl @IrImplementationDetail constructor( override val startOffset: Int, override val endOffset: Int, override var origin: IrDeclarationOrigin, diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt index 991566f0a4a..5e0d79cc1a1 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt @@ -12,14 +12,17 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.* +import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.descriptors.IrAbstractDescriptorBasedFunctionFactory import org.jetbrains.kotlin.ir.linkage.IrProvider import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol -import org.jetbrains.kotlin.ir.symbols.impl.* +import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.SimpleTypeNullability import org.jetbrains.kotlin.ir.types.classOrNull @@ -188,9 +191,23 @@ internal class BuiltInFictitiousFunctionIrClassFactory( ): IrSimpleFunction { val functionFactory: (IrSimpleFunctionSymbol) -> IrSimpleFunction = { with(descriptor) { - IrFunctionImpl( - SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, it, name, visibility, modality, returnType, - isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride + symbolTable.irFactory.createSimpleFunction( + SYNTHETIC_OFFSET, + SYNTHETIC_OFFSET, + origin, + name, + visibility, + isInline, + isExpect, + returnType, + modality, + it, + isTailrec, + isSuspend, + isOperator, + isInfix, + isExternal, + isFakeOverride = isFakeOverride, ) } } @@ -329,10 +346,23 @@ internal class BuiltInFictitiousFunctionIrClassFactory( val functionDeclare = { s: IrSimpleFunctionSymbol -> descriptor.run { - IrFunctionImpl( - offset, offset, memberOrigin, s, name, visibility, modality, returnType, - isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, - isFakeOverride = true + symbolTable.irFactory.createSimpleFunction( + offset, + offset, + memberOrigin, + name, + visibility, + isInline, + isExpect, + returnType, + modality, + s, + isTailrec, + isSuspend, + isOperator, + isInfix, + isExternal, + isFakeOverride = true, ) } } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt index 4e7f762eb5a..3a2f65378db 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt @@ -3,10 +3,11 @@ package org.jetbrains.kotlin.backend.konan.cgen import org.jetbrains.kotlin.backend.common.lower.at import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.backend.common.lower.irNot -import org.jetbrains.kotlin.backend.konan.* +import org.jetbrains.kotlin.backend.konan.InteropFqNames +import org.jetbrains.kotlin.backend.konan.PrimitiveBinaryType +import org.jetbrains.kotlin.backend.konan.RuntimeNames import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation -import org.jetbrains.kotlin.ir.util.getAnnotationArgumentValue import org.jetbrains.kotlin.backend.konan.ir.konanLibrary import org.jetbrains.kotlin.backend.konan.lower.FunctionReferenceLowering import org.jetbrains.kotlin.descriptors.ClassKind @@ -18,7 +19,8 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.* +import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl @@ -573,23 +575,22 @@ private fun KotlinStubs.createFakeKotlinExternalFunction( cFunctionName: String, isObjCMethod: Boolean ): IrSimpleFunction { - val bridge = IrFunctionImpl( + val bridge = irBuiltIns.irFactory.createSimpleFunction( UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.DEFINED, - IrSimpleFunctionSymbolImpl(), Name.identifier(cFunctionName), DescriptorVisibilities.PRIVATE, - Modality.FINAL, - signature.returnType, isInline = false, - isExternal = true, + isExpect = false, + signature.returnType, + Modality.FINAL, + IrSimpleFunctionSymbolImpl(), isTailrec = false, isSuspend = false, - isExpect = false, - isFakeOverride = false, isOperator = false, - isInfix = false + isInfix = false, + isExternal = true, ) bridge.annotations += buildSimpleAnnotation(irBuiltIns, UNDEFINED_OFFSET, UNDEFINED_OFFSET, @@ -1186,15 +1187,21 @@ private class ObjCBlockPointerValuePassing( val overriddenInvokeMethod = (functionType.classifier.owner as IrClass).simpleFunctions() .single { it.name == OperatorNameConventions.INVOKE } - val invokeMethod = IrFunctionImpl( - startOffset, endOffset, + val invokeMethod = context.irFactory.createSimpleFunction( + startOffset, + endOffset, OBJC_BLOCK_FUNCTION_IMPL, - IrSimpleFunctionSymbolImpl(), overriddenInvokeMethod.name, - DescriptorVisibilities.PUBLIC, Modality.FINAL, + DescriptorVisibilities.PUBLIC, + isInline = false, + isExpect = false, returnType = functionType.arguments.last().typeOrNull!!, - isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isExpect = false, - isFakeOverride = false, isOperator = false, isInfix = false + Modality.FINAL, + IrSimpleFunctionSymbolImpl(), + isTailrec = false, + isSuspend = false, + isOperator = false, + isInfix = false, ) invokeMethod.overriddenSymbols += overriddenInvokeMethod.symbol irClass.addChild(invokeMethod) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt index ebc0be80c9a..85568023d13 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.buildVariable import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression @@ -112,23 +112,23 @@ private fun createKotlinBridge( foreignExceptionMode: ForeignExceptionMode.Mode, origin: IrDeclarationOrigin ): IrFunction { - val bridge = IrFunctionImpl( + val bridge = stubs.irBuiltIns.irFactory.createSimpleFunction( startOffset, endOffset, origin, - IrSimpleFunctionSymbolImpl(), Name.identifier(cBridgeName), DescriptorVisibilities.PRIVATE, - Modality.FINAL, - IrUninitializedType, isInline = false, - isExternal = isExternal, + isExpect = false, + IrUninitializedType, + Modality.FINAL, + IrSimpleFunctionSymbolImpl(), isTailrec = false, isSuspend = false, - isExpect = false, - isFakeOverride = false, isOperator = false, - isInfix = false + isInfix = false, + isExternal = isExternal, + isFakeOverride = false, ) if (isExternal) { bridge.annotations += buildSimpleAnnotation(stubs.irBuiltIns, startOffset, endOffset, diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BridgesBuilding.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BridgesBuilding.kt index cf5dcdf27ff..07d0fdcf4c5 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BridgesBuilding.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BridgesBuilding.kt @@ -21,10 +21,13 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl -import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.* +import org.jetbrains.kotlin.ir.expressions.IrBlockBody +import org.jetbrains.kotlin.ir.expressions.IrCall +import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionReference +import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl @@ -127,23 +130,22 @@ internal class WorkersBridgesBuilding(val context: Context) : DeclarationContain val startOffset = jobFunction.startOffset val endOffset = jobFunction.endOffset runtimeJobFunction = - IrFunctionImpl( - startOffset, endOffset, + context.irFactory.createSimpleFunction( + startOffset, + endOffset, IrDeclarationOrigin.DEFINED, - IrSimpleFunctionSymbolImpl(), jobFunction.name, jobFunction.visibility, - jobFunction.modality, isInline = false, - isExternal = false, + isExpect = false, + returnType = context.irBuiltIns.anyNType, + jobFunction.modality, + IrSimpleFunctionSymbolImpl(), isTailrec = false, isSuspend = false, - returnType = context.irBuiltIns.anyNType, - isExpect = false, - isFakeOverride = false, isOperator = false, - isInfix = false - ) + isInfix = false, + ) runtimeJobFunction.valueParameters += IrValueParameterImpl( diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InitializersLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InitializersLowering.kt index 971bfa73bfc..9d03ea4b9ec 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InitializersLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InitializersLowering.kt @@ -7,20 +7,15 @@ package org.jetbrains.kotlin.backend.konan.lower import org.jetbrains.kotlin.backend.common.ClassLoweringPass import org.jetbrains.kotlin.backend.common.CommonBackendContext -import org.jetbrains.kotlin.backend.common.lower.createIrBuilder -import org.jetbrains.kotlin.backend.common.lower.irBlockBody import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.DescriptorVisibilities +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.builders.irDelegatingConstructorCall import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl -import org.jetbrains.kotlin.ir.types.isPrimitiveType -import org.jetbrains.kotlin.ir.types.isString import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid @@ -109,22 +104,21 @@ internal class InitializersLowering(val context: CommonBackendContext) : ClassLo val startOffset = irClass.startOffset val endOffset = irClass.endOffset val initializeFun = - IrFunctionImpl( - startOffset, endOffset, + context.irFactory.createSimpleFunction( + startOffset, + endOffset, DECLARATION_ORIGIN_ANONYMOUS_INITIALIZER, - IrSimpleFunctionSymbolImpl(), "INITIALIZER".synthesizedName, DescriptorVisibilities.PRIVATE, - Modality.FINAL, - context.irBuiltIns.unitType, isInline = false, - isSuspend = false, - isExternal = false, - isTailrec = false, isExpect = false, - isFakeOverride = false, + context.irBuiltIns.unitType, + Modality.FINAL, + IrSimpleFunctionSymbolImpl(), + isTailrec = false, + isSuspend = false, isOperator = false, - isInfix = false + isInfix = false, ).apply { parent = irClass irClass.declarations.add(this) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt index 9ccef0983c1..44fa78faf85 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.backend.konan.lower import org.jetbrains.kotlin.backend.common.FileLoweringPass -import org.jetbrains.kotlin.ir.util.inlineFunction import org.jetbrains.kotlin.backend.common.lower.* import org.jetbrains.kotlin.backend.common.peek import org.jetbrains.kotlin.backend.common.pop @@ -15,7 +14,10 @@ import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.cgen.* import org.jetbrains.kotlin.backend.konan.descriptors.allOverriddenFunctions import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName -import org.jetbrains.kotlin.backend.konan.ir.* +import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation +import org.jetbrains.kotlin.backend.konan.ir.getSuperClassNotAny +import org.jetbrains.kotlin.backend.konan.ir.isFromInteropLibrary +import org.jetbrains.kotlin.backend.konan.ir.konanLibrary import org.jetbrains.kotlin.backend.konan.llvm.IntrinsicType import org.jetbrains.kotlin.backend.konan.llvm.tryGetIntrinsicType import org.jetbrains.kotlin.descriptors.ClassDescriptor @@ -27,13 +29,10 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.objcinterop.* -import org.jetbrains.kotlin.ir.util.toIrConst import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol @@ -271,22 +270,21 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) : // Generate `override fun init...(...) = this.initBy(...)`: - return IrFunctionImpl( - constructor.startOffset, constructor.endOffset, + return context.irFactory.createSimpleFunction( + constructor.startOffset, + constructor.endOffset, OVERRIDING_INITIALIZER_BY_CONSTRUCTOR, - IrSimpleFunctionSymbolImpl(), initMethod.name, DescriptorVisibilities.PUBLIC, - Modality.OPEN, - irClass.defaultType, isInline = false, - isExternal = false, + isExpect = false, + irClass.defaultType, + Modality.OPEN, + IrSimpleFunctionSymbolImpl(), isTailrec = false, isSuspend = false, - isExpect = false, - isFakeOverride = false, isOperator = false, - isInfix = false + isInfix = false, ).also { result -> result.parent = irClass result.createDispatchReceiverParameter() @@ -369,24 +367,23 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) : function.valueParameters.mapTo(parameterTypes) { nativePtrType } val newFunction = - IrFunctionImpl( - function.startOffset, function.endOffset, + context.irFactory.createSimpleFunction( + function.startOffset, + function.endOffset, // The generated function is called by ObjC and contains Kotlin code, so // it must switch thread state and potentially initialize runtime on this thread. CBridgeOrigin.C_TO_KOTLIN_BRIDGE, - IrSimpleFunctionSymbolImpl(), ("imp:$selector").synthesizedName, DescriptorVisibilities.PRIVATE, - Modality.FINAL, - function.returnType, isInline = false, - isExternal = false, + isExpect = false, + function.returnType, + Modality.FINAL, + IrSimpleFunctionSymbolImpl(), isTailrec = false, isSuspend = false, - isExpect = false, - isFakeOverride = false, isOperator = false, - isInfix = false + isInfix = false, ) newFunction.valueParameters += parameterTypes.mapIndexed { index, type -> diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt index 11de26d0d97..fc7fbb20b82 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt @@ -5,18 +5,19 @@ import org.jetbrains.kotlin.backend.common.lower.* import org.jetbrains.kotlin.backend.common.lower.optimizations.LivenessAnalysis import org.jetbrains.kotlin.backend.konan.Context import org.jetbrains.kotlin.backend.konan.NativeGenerationState -import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.DescriptorVisibilities +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.* -import org.jetbrains.kotlin.ir.builders.irCall import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.impl.* +import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrSetValueImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrSuspendableExpressionImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrSuspensionPointImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl @@ -28,7 +29,6 @@ import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.* import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.calls.checkers.isRestrictedSuspendFunction -import org.jetbrains.kotlin.resolve.calls.checkers.isRestrictsSuspensionReceiver internal class NativeSuspendFunctionsLowering( generationState: NativeGenerationState @@ -457,42 +457,40 @@ internal class NativeSuspendFunctionsLowering( // These are marker functions to split up the lowering on two parts. private val saveState = - IrFunctionImpl( - SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, + context.irFactory.createSimpleFunction( + SYNTHETIC_OFFSET, + SYNTHETIC_OFFSET, IrDeclarationOrigin.DEFINED, - IrSimpleFunctionSymbolImpl(), "saveState".synthesizedName, DescriptorVisibilities.PRIVATE, - Modality.ABSTRACT, - context.irBuiltIns.unitType, isInline = false, - isExternal = false, + isExpect = false, + context.irBuiltIns.unitType, + Modality.ABSTRACT, + IrSimpleFunctionSymbolImpl(), isTailrec = false, isSuspend = false, - isExpect = false, - isFakeOverride = false, isOperator = false, - isInfix = false + isInfix = false, ) private val restoreState = - IrFunctionImpl( - SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, - IrDeclarationOrigin.DEFINED, - IrSimpleFunctionSymbolImpl(), - "restoreState".synthesizedName, - DescriptorVisibilities.PRIVATE, - Modality.ABSTRACT, - context.irBuiltIns.unitType, - isInline = false, - isExternal = false, - isTailrec = false, - isSuspend = false, - isExpect = false, - isFakeOverride = false, - isOperator = false, - isInfix = false - ) + context.irFactory.createSimpleFunction( + SYNTHETIC_OFFSET, + SYNTHETIC_OFFSET, + IrDeclarationOrigin.DEFINED, + "restoreState".synthesizedName, + DescriptorVisibilities.PRIVATE, + isInline = false, + isExpect = false, + context.irBuiltIns.unitType, + Modality.ABSTRACT, + IrSimpleFunctionSymbolImpl(), + isTailrec = false, + isSuspend = false, + isOperator = false, + isInfix = false, + ) private fun IrBuilderWithScope.irVar(name: Name, type: IrType, isMutable: Boolean = false, diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/TestProcessor.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/TestProcessor.kt index 8b9408b5cee..15d1e0bf3de 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/TestProcessor.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/TestProcessor.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.buildField import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -332,22 +331,21 @@ internal class TestProcessor (val context: Context) { private fun buildObjectGetter(objectSymbol: IrClassSymbol, owner: IrClass, getterName: Name): IrSimpleFunction = - IrFunctionImpl( - owner.startOffset, owner.endOffset, + context.irFactory.createSimpleFunction( + owner.startOffset, + owner.endOffset, TEST_SUITE_GENERATED_MEMBER, - IrSimpleFunctionSymbolImpl(), getterName, DescriptorVisibilities.PROTECTED, - Modality.FINAL, - objectSymbol.starProjectedType, isInline = false, - isExternal = false, + isExpect = false, + objectSymbol.starProjectedType, + Modality.FINAL, + IrSimpleFunctionSymbolImpl(), isTailrec = false, isSuspend = false, - isExpect = false, - isFakeOverride = false, isOperator = false, - isInfix = false + isInfix = false, ).apply { parent = owner @@ -370,22 +368,21 @@ internal class TestProcessor (val context: Context) { private fun buildInstanceGetter(classSymbol: IrClassSymbol, owner: IrClass, getterName: Name): IrSimpleFunction = - IrFunctionImpl( - owner.startOffset, owner.endOffset, + context.irFactory.createSimpleFunction( + owner.startOffset, + owner.endOffset, TEST_SUITE_GENERATED_MEMBER, - IrSimpleFunctionSymbolImpl(), getterName, DescriptorVisibilities.PROTECTED, - Modality.FINAL, - classSymbol.starProjectedType, isInline = false, - isExternal = false, + isExpect = false, + classSymbol.starProjectedType, + Modality.FINAL, + IrSimpleFunctionSymbolImpl(), isTailrec = false, isSuspend = false, - isExpect = false, - isFakeOverride = false, isOperator = false, - isInfix = false + isInfix = false, ).apply { parent = owner diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VolatileFieldsLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VolatileFieldsLowering.kt index eb6cd5deb1a..8779d0bbdff 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VolatileFieldsLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/VolatileFieldsLowering.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol -import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.*