[IR] Fix for https://youtrack.jetbrains.com/issue/KT-37057 + test
This commit is contained in:
+2
-7
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.backend.common.lower.irNot
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
import org.jetbrains.kotlin.backend.konan.ir.containsNull
|
||||
import org.jetbrains.kotlin.backend.konan.ir.isSubtypeOf
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltinOperatorDescriptor
|
||||
@@ -26,6 +25,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.types.makeNullable
|
||||
import org.jetbrains.kotlin.ir.builders.irGet
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.isNothing
|
||||
@@ -39,7 +39,6 @@ import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||
*/
|
||||
internal class BuiltinOperatorLowering(val context: Context) : FileLoweringPass, IrBuildingTransformer(context) {
|
||||
|
||||
private val builtIns = context.builtIns
|
||||
private val irBuiltins = context.irModule!!.irBuiltins
|
||||
private val symbols = context.ir.symbols
|
||||
|
||||
@@ -135,11 +134,7 @@ internal class BuiltinOperatorLowering(val context: Context) : FileLoweringPass,
|
||||
val equals = irClass.simpleFunctions()
|
||||
.single { it.name.asString() == "equals" && it.valueParameters.size == 1 && it.overrides(anyEquals) }
|
||||
|
||||
// Note: this is not absolutely correct for inline class from other module
|
||||
// since custom equals implementation can be added after compilation but before linking.
|
||||
// TODO: reimplement after inline classes get properly designed `equals` operator.
|
||||
// see https://youtrack.jetbrains.com/issue/KT-26354.
|
||||
return equals.descriptor.kind == CallableMemberDescriptor.Kind.SYNTHESIZED
|
||||
return equals.origin == IrDeclarationOrigin.GENERATED_INLINE_CLASS_MEMBER
|
||||
}
|
||||
|
||||
fun IrBuilderWithScope.genInlineClassEquals(
|
||||
|
||||
@@ -3008,6 +3008,10 @@ task inlineClass0(type: KonanLocalTest) {
|
||||
source = "codegen/inlineClass/inlineClass0.kt"
|
||||
}
|
||||
|
||||
task inlineClass_customEquals(type: KonanLocalTest) {
|
||||
source = "codegen/inlineClass/customEquals.kt"
|
||||
}
|
||||
|
||||
task deserialized_inline0(type: KonanLocalTest) {
|
||||
source = "serialization/deserialized_inline0.kt"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the LICENSE file.
|
||||
*/
|
||||
@file:Suppress("RESERVED_MEMBER_INSIDE_INLINE_CLASS")
|
||||
package codegen.inlineClass.customEquals
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
private inline class Z(val data: Int) {
|
||||
override fun equals(other: Any?) = other is Z && data % 256 == other.data % 256
|
||||
}
|
||||
|
||||
@Test fun runTest() {
|
||||
assertTrue(Z(0) == Z(256))
|
||||
}
|
||||
Reference in New Issue
Block a user