Skip to content

Commit 49ae192

Browse files
committed
Check in post-typer that equalities are safe
Typer can still accept equality tests between members of Any and members of some equality class. These are weeded out in PostTyper.
1 parent 72fb8a8 commit 49ae192

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

src/dotty/tools/dotc/transform/PostTyper.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,11 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisTran
207207
case _ =>
208208
super.transform(tree1)
209209
}
210+
case tree @ Apply(Select(lhs, nme.EQ), rhs :: Nil) if tree.symbol == defn.Any_== =>
211+
if (lhs.tpe.derivesFrom(defn.EqClassClass) ||
212+
rhs.tpe.derivesFrom(defn.EqClassClass) && !lhs.tpe.isRef(defn.NullClass))
213+
ctx.error(d"values of type ${lhs.tpe} and ${rhs.tpe} cannot be compared", tree.pos)
214+
super.transform(tree)
210215
case tree @ Assign(sel: Select, _) =>
211216
superAcc.transformAssign(super.transform(tree))
212217
case tree: Template =>

0 commit comments

Comments
 (0)