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 {
153
153
val xs = xSpace.decompose.map(_.tp)
154
154
xs.forall(x => isCheckDefinitelyFalse(x, p))
155
155
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)
158
159
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
161
164
}
162
165
163
166
def recur (X : Type , P : Type ): String = (X <:< P ) ||| (P .dealias match {
Original file line number Diff line number Diff line change 1
1
class 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]
4
4
case _ => 0
5
5
}
6
6
@@ -17,4 +17,9 @@ class Foo {
17
17
case ls : A [X ] => 4 // error
18
18
case _ => 0
19
19
}
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
+ }
20
25
}
You can’t perform that action at this time.
0 commit comments