Skip to content

Commit d466f9f

Browse files
Merge pull request #14480 from dotty-staging/fix-#14442
Find inline calls inserted in synthetic members
2 parents dbfe1b5 + d56c203 commit d466f9f

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

compiler/src/dotty/tools/dotc/transform/SyntheticMembers.scala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,16 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
610610

611611
def addSyntheticMembers(impl: Template)(using Context): Template = {
612612
val clazz = ctx.owner.asClass
613+
val syntheticMembers = serializableObjectMethod(clazz) ::: serializableEnumValueMethod(clazz) ::: caseAndValueMethods(clazz)
614+
checkInlining(syntheticMembers)
613615
addMirrorSupport(
614-
cpy.Template(impl)(body = serializableObjectMethod(clazz) ::: serializableEnumValueMethod(clazz) ::: caseAndValueMethods(clazz) ::: impl.body))
616+
cpy.Template(impl)(body = syntheticMembers ::: impl.body))
615617
}
618+
619+
private def checkInlining(syntheticMembers: List[Tree])(using Context): Unit =
620+
if syntheticMembers.exists(_.existsSubTree {
621+
case tree: GenericApply => tree.symbol.isAllOf(InlineMethod)
622+
case tree: Select => tree.symbol.isAllOf(InlineMethod)
623+
case _ => false
624+
}) then ctx.compilationUnit.needsInlining = true
616625
}

tests/pos/i14442.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class Foo(val id: Int) {
2+
inline def ==(that: Foo): Boolean = true
3+
}
4+
case class FooWrapper(foo: Foo)

0 commit comments

Comments
 (0)