diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DataClassMembersGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DataClassMembersGenerator.kt index 9f2aa630462..3f241ae2200 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DataClassMembersGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DataClassMembersGenerator.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.expressions.mapTypeParameters import org.jetbrains.kotlin.ir.expressions.mapValueParameters @@ -56,6 +57,8 @@ class DataClassMembersGenerator( MyDataClassMethodGenerator(ktClassOrObject, irClass, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER).generate() } + fun IrMemberAccessExpression.commitSubstituted(descriptor: CallableDescriptor) = context.run { commitSubstituted(descriptor) } + private fun declareSimpleFunction(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, function: FunctionDescriptor) = context.symbolTable.declareSimpleFunctionWithOverrides( startOffset, endOffset, origin, @@ -257,7 +260,9 @@ class DataClassMembersGenerator( } private fun MemberFunctionBuilder.getHashCodeOf(kotlinType: KotlinType, irValue: IrExpression): IrExpression { + var substituted: FunctionDescriptor? = null val hashCodeFunctionSymbol = getHashCodeFunction(kotlinType) { + substituted = it declarationGenerator.context.symbolTable.referenceSimpleFunction(it.original) } @@ -267,6 +272,7 @@ class DataClassMembersGenerator( } else { putValueArgument(0, irValue) } + commitSubstituted(substituted ?: hashCodeFunctionSymbol.descriptor) } } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt index a07273c669f..698cd4d5d70 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt @@ -55,4 +55,8 @@ class GeneratorContext( // TODO: inject a correct StorageManager instance, or store NotFoundClasses inside ModuleDescriptor val reflectionTypes = ReflectionTypes(moduleDescriptor, NotFoundClasses(LockBasedStorageManager.NO_LOCKS, moduleDescriptor)) + + fun IrMemberAccessExpression.commitSubstituted(descriptor: CallableDescriptor) { + callToSubstitutedDescriptorMap[this] = descriptor + } } diff --git a/compiler/testData/codegen/box/inlineClasses/genericInlineClassSynthMembers.kt b/compiler/testData/codegen/box/inlineClasses/genericInlineClassSynthMembers.kt new file mode 100644 index 00000000000..7df5afa6cfd --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/genericInlineClassSynthMembers.kt @@ -0,0 +1,27 @@ +// IGNORE_BACKEND_FIR: JVM_IR +// IGNORE_BACKEND: JS +// MODULE: lib1 +// FILE: lib1.kt + +class C(val t: T) { + override fun hashCode(): Int = t as Int +} + +// MODULE: lib2(lib1) +// FILE: lib2.kt + +inline class IC(val c: C) { + fun foo(): Int = c.hashCode() +} + + +// MODULE: main(lib2) +// FILE: main.kt + + +fun box(): String { + val ic = IC(C(42)) + + if (ic.foo() != 42) return "FAIL" + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.fir.txt b/compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.fir.txt new file mode 100644 index 00000000000..126d983b566 --- /dev/null +++ b/compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.fir.txt @@ -0,0 +1,94 @@ +FILE fqName: fileName:/inlineClassSyntheticMethods.kt + CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.C.C> + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> (t:T of .C) returnType:.C.C> [primary] + VALUE_PARAMETER name:t index:0 type:T of .C + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]' + PROPERTY name:t visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:t type:T of .C visibility:private [final] + EXPRESSION_BODY + GET_VAR 't: T of .C declared in .C.' type=T of .C origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.C.C>) returnType:T of .C + correspondingProperty: PROPERTY name:t visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.C.C> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): T of .C declared in .C' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:t type:T of .C visibility:private [final]' type=T of .C origin=null + receiver: GET_VAR ': .C.C> declared in .C.' type=.C.C> origin=null + FUN name:hashCode visibility:public modality:FINAL <> ($this:.C.C>) returnType:kotlin.Int + $this: VALUE_PARAMETER name: type:.C.C> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun hashCode (): kotlin.Int declared in .C' + TYPE_OP type=kotlin.Int origin=CAST typeOperand=kotlin.Int + CALL 'public final fun (): T of .C declared in .C' type=T of .C origin=null + $this: GET_VAR ': .C.C> declared in .C.hashCode' type=.C.C> origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:IC modality:FINAL visibility:public [inline] superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.IC.IC> + TYPE_PARAMETER name:TT index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> (c:.C.IC>) returnType:.IC.IC> [primary] + VALUE_PARAMETER name:c index:0 type:.C.IC> + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:IC modality:FINAL visibility:public [inline] superTypes:[kotlin.Any]' + PROPERTY name:c visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:c type:.C.IC> visibility:private [final] + EXPRESSION_BODY + GET_VAR 'c: .C.IC> declared in .IC.' type=.C.IC> origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.IC.IC>) returnType:.C.IC> + correspondingProperty: PROPERTY name:c visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.IC.IC> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): .C.IC> declared in .IC' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:c type:.C.IC> visibility:private [final]' type=.C.IC> origin=null + receiver: GET_VAR ': .IC.IC> declared in .IC.' type=.IC.IC> origin=null + FUN name:foo visibility:public modality:FINAL <> ($this:.IC.IC>) returnType:kotlin.Int + $this: VALUE_PARAMETER name: type:.IC.IC> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.Int declared in .IC' + CALL 'public final fun hashCode (): kotlin.Int declared in .C' type=kotlin.Int origin=null + $this: CALL 'public final fun (): .C.IC> declared in .IC' type=.C.IC> origin=null + $this: GET_VAR ': .IC.IC> declared in .IC.foo' type=.IC.IC> origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String + BLOCK_BODY + VAR name:ic type:.IC [val] + CONSTRUCTOR_CALL 'public constructor (c: .C.IC>) [primary] declared in .IC' type=.IC origin=null + : kotlin.Int + c: CONSTRUCTOR_CALL 'public constructor (t: T of .C) [primary] declared in .C' type=.C origin=null + : kotlin.Int + t: CONST Int type=kotlin.Int value=42 + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'public final fun foo (): kotlin.Int declared in .IC' type=kotlin.Int origin=null + $this: GET_VAR 'val ic: .IC [val] declared in .box' type=.IC origin=null + arg1: CONST Int type=kotlin.Int value=42 + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="FAIL" + RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="OK" diff --git a/compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.kt b/compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.kt new file mode 100644 index 00000000000..2df1de559e0 --- /dev/null +++ b/compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.kt @@ -0,0 +1,16 @@ +// !LANGUAGE: +InlineClasses + +class C(val t: T) { + override fun hashCode(): Int = t as Int +} + +inline class IC(val c: C) { + fun foo(): Int = c.hashCode() +} + +fun box(): String { + val ic = IC(C(42)) + + if (ic.foo() != 42) return "FAIL" + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.txt b/compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.txt new file mode 100644 index 00000000000..fe338ef668d --- /dev/null +++ b/compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.txt @@ -0,0 +1,131 @@ +FILE fqName: fileName:/inlineClassSyntheticMethods.kt + CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.C.C> + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> (t:T of .C) returnType:.C.C> [primary] + VALUE_PARAMETER name:t index:0 type:T of .C + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]' + PROPERTY name:t visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:t type:T of .C visibility:private [final] + EXPRESSION_BODY + GET_VAR 't: T of .C declared in .C.' type=T of .C origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.C.C>) returnType:T of .C + correspondingProperty: PROPERTY name:t visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.C.C> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): T of .C declared in .C' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:t type:T of .C visibility:private [final]' type=T of .C origin=null + receiver: GET_VAR ': .C.C> declared in .C.' type=.C.C> origin=null + FUN name:hashCode visibility:public modality:OPEN <> ($this:.C.C>) returnType:kotlin.Int + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.C.C> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in .C' + TYPE_OP type=kotlin.Int origin=CAST typeOperand=kotlin.Int + CALL 'public final fun (): T of .C declared in .C' type=T of .C origin=GET_PROPERTY + $this: GET_VAR ': .C.C> declared in .C.hashCode' type=.C.C> origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:IC modality:FINAL visibility:public [inline] superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.IC.IC> + TYPE_PARAMETER name:TT index:0 variance: superTypes:[kotlin.Any?] + CONSTRUCTOR visibility:public <> (c:.C.IC>) returnType:.IC.IC> [primary] + VALUE_PARAMETER name:c index:0 type:.C.IC> + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:IC modality:FINAL visibility:public [inline] superTypes:[kotlin.Any]' + PROPERTY name:c visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:c type:.C.IC> visibility:private [final] + EXPRESSION_BODY + GET_VAR 'c: .C.IC> declared in .IC.' type=.C.IC> origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.IC.IC>) returnType:.C.IC> + correspondingProperty: PROPERTY name:c visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.IC.IC> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): .C.IC> declared in .IC' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:c type:.C.IC> visibility:private [final]' type=.C.IC> origin=null + receiver: GET_VAR ': .IC.IC> declared in .IC.' type=.IC.IC> origin=null + FUN name:foo visibility:public modality:FINAL <> ($this:.IC.IC>) returnType:kotlin.Int + $this: VALUE_PARAMETER name: type:.IC.IC> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.Int declared in .IC' + CALL 'public open fun hashCode (): kotlin.Int declared in .C' type=kotlin.Int origin=null + $this: CALL 'public final fun (): .C.IC> declared in .IC' type=.C.IC> origin=GET_PROPERTY + $this: GET_VAR ': .IC.IC> declared in .IC.foo' type=.IC.IC> origin=null + FUN GENERATED_INLINE_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:.IC.IC>) returnType:kotlin.String + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.IC.IC> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in .IC' + STRING_CONCATENATION type=kotlin.String + CONST String type=kotlin.String value="IC(" + CONST String type=kotlin.String value="c=" + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:c type:.C.IC> visibility:private [final]' type=.C.IC> origin=null + receiver: GET_VAR ': .IC.IC> declared in .IC.toString' type=.IC.IC> origin=null + CONST String type=kotlin.String value=")" + FUN GENERATED_INLINE_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:.IC.IC>) returnType:kotlin.Int + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.IC.IC> + BLOCK_BODY + RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in .IC' + CALL 'public open fun hashCode (): kotlin.Int declared in .C' type=kotlin.Int origin=null + $this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:c type:.C.IC> visibility:private [final]' type=.C.IC> origin=null + receiver: GET_VAR ': .IC.IC> declared in .IC.hashCode' type=.IC.IC> origin=null + FUN GENERATED_INLINE_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:.IC.IC>, other:kotlin.Any?) returnType:kotlin.Boolean [operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any + $this: VALUE_PARAMETER name: type:.IC.IC> + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + BLOCK_BODY + WHEN type=kotlin.Unit origin=null + BRANCH + if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=.IC.IC> + GET_VAR 'other: kotlin.Any? declared in .IC.equals' type=kotlin.Any? origin=null + then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in .IC' + CONST Boolean type=kotlin.Boolean value=false + VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:.IC.IC> [val] + TYPE_OP type=.IC.IC> origin=CAST typeOperand=.IC.IC> + GET_VAR 'other: kotlin.Any? declared in .IC.equals' type=kotlin.Any? origin=null + WHEN type=kotlin.Unit origin=null + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:c type:.C.IC> visibility:private [final]' type=.C.IC> origin=null + receiver: GET_VAR ': .IC.IC> declared in .IC.equals' type=.IC.IC> origin=null + arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:c type:.C.IC> visibility:private [final]' type=.C.IC> origin=null + receiver: GET_VAR 'val tmp_0: .IC.IC> [val] declared in .IC.equals' type=.IC.IC> origin=null + then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in .IC' + CONST Boolean type=kotlin.Boolean value=false + RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in .IC' + CONST Boolean type=kotlin.Boolean value=true + FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String + BLOCK_BODY + VAR name:ic type:.IC [val] + CONSTRUCTOR_CALL 'public constructor (c: .C.IC>) [primary] declared in .IC' type=.IC origin=null + : kotlin.Int + c: CONSTRUCTOR_CALL 'public constructor (t: T of .C) [primary] declared in .C' type=.C origin=null + : kotlin.Int + t: CONST Int type=kotlin.Int value=42 + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'public final fun foo (): kotlin.Int declared in .IC' type=kotlin.Int origin=null + $this: GET_VAR 'val ic: .IC [val] declared in .box' type=.IC origin=null + arg1: CONST Int type=kotlin.Int value=42 + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="FAIL" + RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="OK" diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 33ee6b34a9b..30a7d4a3c19 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -13020,6 +13020,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/fieldNameClash.kt"); } + @TestMetadata("genericInlineClassSynthMembers.kt") + public void testGenericInlineClassSynthMembers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/genericInlineClassSynthMembers.kt"); + } + @TestMetadata("inlineClassAsLastExpressionInInLambda.kt") public void testInlineClassAsLastExpressionInInLambda() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 2ef6509333b..c41347c8388 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -13030,6 +13030,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/extLambdaInInlineClassFun2.kt"); } + @TestMetadata("genericInlineClassSynthMembers.kt") + public void testGenericInlineClassSynthMembers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/genericInlineClassSynthMembers.kt"); + } + @TestMetadata("inlineClassAsLastExpressionInInLambda.kt") public void testInlineClassAsLastExpressionInInLambda() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 74226fab5bb..dcc3ce785d2 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -11895,6 +11895,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inlineClasses/fieldNameClash.kt"); } + @TestMetadata("genericInlineClassSynthMembers.kt") + public void testGenericInlineClassSynthMembers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/genericInlineClassSynthMembers.kt"); + } + @TestMetadata("inlineClassAsLastExpressionInInLambda.kt") public void testInlineClassAsLastExpressionInInLambda() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 3350f53f768..b91a1305bbc 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -11895,6 +11895,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/fieldNameClash.kt"); } + @TestMetadata("genericInlineClassSynthMembers.kt") + public void testGenericInlineClassSynthMembers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/genericInlineClassSynthMembers.kt"); + } + @TestMetadata("inlineClassAsLastExpressionInInLambda.kt") public void testInlineClassAsLastExpressionInInLambda() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java b/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java index b8d892ba1b6..6568c55a940 100644 --- a/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java @@ -165,6 +165,11 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase { runTest("compiler/testData/ir/irText/classes/inlineClass.kt"); } + @TestMetadata("inlineClassSyntheticMethods.kt") + public void testInlineClassSyntheticMethods() throws Exception { + runTest("compiler/testData/ir/irText/classes/inlineClassSyntheticMethods.kt"); + } + @TestMetadata("innerClass.kt") public void testInnerClass() throws Exception { runTest("compiler/testData/ir/irText/classes/innerClass.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 1576ececfe0..f5f965befcb 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -10245,6 +10245,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/fieldNameClash.kt"); } + @TestMetadata("genericInlineClassSynthMembers.kt") + public void testGenericInlineClassSynthMembers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/genericInlineClassSynthMembers.kt"); + } + @TestMetadata("inlineClassAsLastExpressionInInLambda.kt") public void testInlineClassAsLastExpressionInInLambda() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 23d167d5ef3..579554503da 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -10310,6 +10310,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/fieldNameClash.kt"); } + @TestMetadata("genericInlineClassSynthMembers.kt") + public void testGenericInlineClassSynthMembers() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/genericInlineClassSynthMembers.kt"); + } + @TestMetadata("inlineClassAsLastExpressionInInLambda.kt") public void testInlineClassAsLastExpressionInInLambda() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");