Skip to content

Commit 006e233

Browse files
Fix #1335: Generate null checks for extractors
1 parent fbb9dba commit 006e233

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/dotty/tools/dotc/transform/PatternMatcher.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,9 +253,13 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {
253253
)
254254
} else {
255255
assert(defn.isProductSubType(prev.tpe))
256-
Block(
257-
List(ValDef(b.asTerm, prev)),
258-
next //Substitution(b, ref(prevSym))(next)
256+
val nullCheck: Tree = prev.select(defn.Object_ne).appliedTo(Literal(Constant(null)))
257+
ifThenElseZero(
258+
nullCheck,
259+
Block(
260+
List(ValDef(b.asTerm, prev)),
261+
next //Substitution(b, ref(prevSym))(next)
262+
)
259263
)
260264
}
261265
}

tests/pos/t1335.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
case class MyTuple(a: Int, b: Int)
2+
3+
object Test {
4+
def main(args: Array[String]): Unit =
5+
try {
6+
val mt: MyTuple = null
7+
val MyTuple(a, b) = mt
8+
} catch {
9+
case e: MatchError => ()
10+
}
11+
}

0 commit comments

Comments
 (0)