File tree Expand file tree Collapse file tree 2 files changed +19
-4
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 2 files changed +19
-4
lines changed Original file line number Diff line number Diff line change @@ -3808,10 +3808,19 @@ class Typer extends Namer
3808
3808
mapOver(tp)
3809
3809
}
3810
3810
3811
- if tree.symbol.isOneOf(Module | Enum )
3812
- && ! (tree.tpe frozen_<:< pt) // fast track
3813
- && ! (tree.tpe frozen_<:< approx(pt))
3814
- then
3811
+ val sym = tree.symbol
3812
+
3813
+ // Is it certain that a value of `tree.tpe` never a subtype of `pt`
3814
+ val definiteNotSubType = {
3815
+ val clsA = sym.info.classSymbol
3816
+ val clsB = pt.classSymbol
3817
+ clsA.exists && clsB.exists && ! clsA.asClass.mayHaveCommonChild(clsB.asClass)
3818
+ || sym.isOneOf(Module | Enum )
3819
+ && ! (tree.tpe frozen_<:< pt) // fast track
3820
+ && ! (tree.tpe frozen_<:< approx(pt))
3821
+ }
3822
+
3823
+ if definiteNotSubType then
3815
3824
// We could check whether `equals` is overriden.
3816
3825
// Reasons for not doing so:
3817
3826
// - it complicates the protocol
Original file line number Diff line number Diff line change
1
+ object UnitTest extends App {
2
+ def foo (m : Unit ) = m match {
3
+ case runtime.BoxedUnit .UNIT => println(" ok" ) // error
4
+ }
5
+ foo(())
6
+ }
You can’t perform that action at this time.
0 commit comments