Skip to content

Commit d4cd2c0

Browse files
committed
Fix criterion when value classes have user defined equals methods
1 parent 1a1a204 commit d4cd2c0

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package transform
33

44
import ast.tpd
55
import core._
6-
import Contexts._, Symbols._, Types._, Flags._
6+
import Contexts._, Symbols._, Types._, Flags._, Phases._
77
import DenotTransformers._, MegaPhase._
88
import TreeExtractors._, ValueClasses._
99

@@ -24,8 +24,10 @@ class VCElideAllocations extends MiniPhase with IdentityDenotTransformer {
2424

2525
override def transformApply(tree: Apply)(using Context): Tree =
2626
def hasUserDefinedEquals(tp: Type): Boolean =
27-
val eql = defn.Any_equals.overridingSymbol(tp.typeSymbol.asClass)
28-
eql.exists && !eql.is(Synthetic)
27+
val eql = atPhase(erasurePhase) {
28+
defn.Any_equals.matchingMember(tp.typeSymbol.thisType)
29+
}
30+
eql.owner != defn.AnyClass && !eql.is(Synthetic)
2931
tree match {
3032
// new V(u1) == new V(u2) => u1 == u2, unless V defines its own equals.
3133
// (We don't handle != because it has been eliminated by InterceptedMethods)

0 commit comments

Comments
 (0)