diff --git a/compiler/src/dotty/tools/dotc/transform/SyntheticMembers.scala b/compiler/src/dotty/tools/dotc/transform/SyntheticMembers.scala index 3a94a78b3d8e..4ce4619aa3b9 100644 --- a/compiler/src/dotty/tools/dotc/transform/SyntheticMembers.scala +++ b/compiler/src/dotty/tools/dotc/transform/SyntheticMembers.scala @@ -610,7 +610,16 @@ class SyntheticMembers(thisPhase: DenotTransformer) { def addSyntheticMembers(impl: Template)(using Context): Template = { val clazz = ctx.owner.asClass + val syntheticMembers = serializableObjectMethod(clazz) ::: serializableEnumValueMethod(clazz) ::: caseAndValueMethods(clazz) + checkInlining(syntheticMembers) addMirrorSupport( - cpy.Template(impl)(body = serializableObjectMethod(clazz) ::: serializableEnumValueMethod(clazz) ::: caseAndValueMethods(clazz) ::: impl.body)) + cpy.Template(impl)(body = syntheticMembers ::: impl.body)) } + + private def checkInlining(syntheticMembers: List[Tree])(using Context): Unit = + if syntheticMembers.exists(_.existsSubTree { + case tree: GenericApply => tree.symbol.isAllOf(InlineMethod) + case tree: Select => tree.symbol.isAllOf(InlineMethod) + case _ => false + }) then ctx.compilationUnit.needsInlining = true } diff --git a/tests/pos/i14442.scala b/tests/pos/i14442.scala new file mode 100644 index 000000000000..60d7e26a0b3f --- /dev/null +++ b/tests/pos/i14442.scala @@ -0,0 +1,4 @@ +class Foo(val id: Int) { + inline def ==(that: Foo): Boolean = true +} +case class FooWrapper(foo: Foo)