Skip to content

Commit 2d5f2d4

Browse files
committed
address review
1 parent e942a16 commit 2d5f2d4

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

compiler/src/dotty/tools/dotc/transform/IsInstanceOfChecker.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@ class IsInstanceOfChecker extends MiniPhase {
2828
}
2929

3030
tree.fun match {
31-
case fn: Select if fn.symbol == defn.Any_typeTest =>
32-
ensureCheckable(fn.qualifier, tree.args.head)
33-
case fn: Select if fn.symbol == defn.Any_isInstanceOf =>
31+
case fn: Select
32+
if fn.symbol == defn.Any_typeTest || fn.symbol == defn.Any_isInstanceOf =>
3433
ensureCheckable(fn.qualifier, tree.args.head)
3534
case _ => tree
3635
}
@@ -66,11 +65,12 @@ object Checkable {
6665
*/
6766
def checkable(X: Type, P: Type, pos: Position)(implicit ctx: Context): Boolean = {
6867
def isAbstract(P: Type) = !P.dealias.typeSymbol.isClass
68+
def isPatternTypeSymbol(sym: Symbol) = !sym.isClass && sym.is(Case)
6969

7070
def replaceP(implicit ctx: Context) = new TypeMap {
7171
def apply(tp: Type) = tp match {
7272
case tref: TypeRef
73-
if !tref.typeSymbol.isClass && tref.symbol.is(Case) => WildcardType
73+
if isPatternTypeSymbol(tref.typeSymbol) => WildcardType
7474
case AnnotatedType(_, annot)
7575
if annot.symbol == defn.UncheckedAnnot => WildcardType
7676
case _ => mapOver(tp)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
object Test {
2+
trait Marker
3+
def foo[T](x: T) = x match {
4+
case _: (T & Marker) => // no warning
5+
// case _: T with Marker => // scalac emits a warning
6+
case _ =>
7+
}
8+
9+
def bar(x: Any) = x.isInstanceOf[List[String]] // error
10+
}

0 commit comments

Comments
 (0)