Skip to content

Commit 35b70a9

Browse files
committed
Harden type checking for enum values
This is a follow-up of #11327. We cannot generalize further without complications: ``` val b = 'b' 56 match case 'a' => case `b` => ```
1 parent 17fe2b0 commit 35b70a9

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3803,7 +3803,7 @@ class Typer extends Namer
38033803
mapOver(tp)
38043804
}
38053805

3806-
if tree.symbol.is(Module)
3806+
if tree.symbol.isOneOf(Module | Enum)
38073807
&& !(tree.tpe frozen_<:< pt) // fast track
38083808
&& !(tree.tpe frozen_<:< approx(pt))
38093809
then

tests/neg/i9740b.scala

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
enum Recovery:
2+
case RecoveryCompleted
3+
4+
enum TypedRecovery:
5+
case TypedRecoveryCompleted
6+
7+
import Recovery.*
8+
import TypedRecovery.*
9+
10+
class Test {
11+
TypedRecoveryCompleted match {
12+
case RecoveryCompleted => println("Recovery completed") // error
13+
case TypedRecoveryCompleted => println("Typed recovery completed")
14+
}
15+
16+
def foo(x: TypedRecovery) = x match
17+
case RecoveryCompleted => // error
18+
case TypedRecoveryCompleted =>
19+
}

0 commit comments

Comments
 (0)