Skip to content

Commit ad6da48

Browse files
authored
Disallow overloading from breaking stable patterns (#18327)
2 parents 2be692d + e6012a0 commit ad6da48

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,9 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
673673
if ctx.mode.is(Mode.Pattern)
674674
&& !tree.isType
675675
&& !pt.isInstanceOf[ApplyingProto]
676-
&& !tree.tpe.isStable
676+
&& !tree.tpe.match
677+
case tp: NamedType => tp.denot.hasAltWith(_.symbol.isStableMember && tp.prefix.isStable || tp.info.isStable)
678+
case tp => tp.isStable
677679
&& !isWildcardArg(tree)
678680
then
679681
report.error(StableIdentPattern(tree, pt), tree.srcPos)

tests/pos/i18247.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
sealed trait Op
2+
object Op {
3+
case object `==` extends Op
4+
}
5+
6+
def t1(a: Op): true = {
7+
a match {
8+
case Op.`==` => true // was: won't compile
9+
}
10+
}

0 commit comments

Comments
 (0)