diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt index 72615a99108..7586a8568ca 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt @@ -67,6 +67,10 @@ open class Symbols(val context: T, private val symb Name.identifier("Iterator"), NoLookupLocation.FROM_BACKEND ) as ClassDescriptor) + val asserts = builtInsPackage("kotlin") + .getContributedFunctions(Name.identifier("assert"), NoLookupLocation.FROM_BACKEND) + .map { symbolTable.referenceFunction(it) } + private fun progression(name: String) = symbolTable.referenceClass( builtInsPackage("kotlin", "ranges").getContributedClassifier( Name.identifier(name), NoLookupLocation.FROM_BACKEND diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt index c254708435e..61dac26a686 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BuiltinOperatorLowering.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.backend.common.BodyLoweringPass import org.jetbrains.kotlin.backend.common.atMostOne import org.jetbrains.kotlin.backend.konan.Context import org.jetbrains.kotlin.backend.konan.KonanConfigKeys.Companion.ENABLE_ASSERTIONS +import org.jetbrains.kotlin.backend.konan.isStdlib import org.jetbrains.kotlin.backend.konan.isValueType import org.jetbrains.kotlin.ir.descriptors.IrBuiltinOperatorDescriptor import org.jetbrains.kotlin.ir.expressions.* @@ -31,6 +32,7 @@ import org.jetbrains.kotlin.ir.util.type import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.types.typeUtil.isNothing import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf import org.jetbrains.kotlin.types.typeUtil.isUnit @@ -52,17 +54,16 @@ private class BuiltinOperatorTransformer(val context: Context) : IrElementTransf private val builtIns = context.builtIns private val irBuiltins = context.irModule!!.irBuiltins + private val enableAssertions = context.config.configuration.getBoolean(ENABLE_ASSERTIONS) - private val assertFqName = "kotlin.assert" + private val assertSymbols = context.ir.symbols.asserts override fun visitCall(expression: IrCall): IrExpression { expression.transformChildrenVoid(this) val descriptor = expression.descriptor - // TODO: use stdlib assert's descriptors instead of fqName // Replace assert() call with an empty composite if assertions are not enabled. - if (descriptor.fqNameSafe.asString() == assertFqName && - !context.config.configuration.getBoolean(ENABLE_ASSERTIONS)) { + if (!enableAssertions && expression.symbol in assertSymbols) { assert(expression.type.isUnit()) return IrCompositeImpl(expression.startOffset, expression.endOffset, expression.type) }