File tree Expand file tree Collapse file tree 2 files changed +14
-6
lines changed
compiler/src/dotty/tools/dotc/transform
tests/neg-custom-args/isInstanceOf Expand file tree Collapse file tree 2 files changed +14
-6
lines changed Original file line number Diff line number Diff line change @@ -153,11 +153,14 @@ object TypeTestsCasts {
153153 val xs = xSpace.decompose.map(_.tp)
154154 xs.forall(x => isCheckDefinitelyFalse(x, p))
155155 else
156- val xClass = effectiveClass(x.widen)
157- val pClass = effectiveClass(p.widen)
156+ if x.typeSymbol.isClass && p.typeSymbol.isClass then
157+ val xClass = effectiveClass(x.widen)
158+ val pClass = effectiveClass(p.widen)
158159
159- ! xClass.derivesFrom(pClass)
160- && (xClass.is(Final ) || pClass.is(Final ) || ! xClass.is(Trait ) && ! pClass.is(Trait ))
160+ ! xClass.derivesFrom(pClass)
161+ && (xClass.is(Final ) || pClass.is(Final ) || ! xClass.is(Trait ) && ! pClass.is(Trait ))
162+ else
163+ false
161164 }
162165
163166 def recur (X : Type , P : Type ): String = (X <:< P ) ||| (P .dealias match {
Original file line number Diff line number Diff line change 11class Foo {
2- def test [A ]: List [Int ] | A => Int = {
3- case ls : List [Int ] => ls.head // ok, List decomposes to Some and None
2+ def test [A ]: ( List [Int ] | A ) => Int = {
3+ case ls : List [Int ] => ls.head // error, A = List[String]
44 case _ => 0
55 }
66
@@ -17,4 +17,9 @@ class Foo {
1717 case ls : A [X ] => 4 // error
1818 case _ => 0
1919 }
20+
21+ def test4 [A ](x : List [Int ] | (A => Int )) = x match {
22+ case ls : List [Int ] => ls.head // ok, List decomposes to Some and None
23+ case _ => 0
24+ }
2025}
You can’t perform that action at this time.
0 commit comments