@@ -835,7 +835,7 @@ object SpaceEngine {
835835 /** Return the underlying type of non-module, non-constant, non-enum case singleton types.
836836 * Also widen ExprType to its result type, and rewrap any annotation wrappers.
837837 * For example, with `val opt = None`, widen `opt.type` to `None.type`. */
838- def toUnderlying (tp : Type )(using Context ): Type = trace(i " toUnderlying( $tp) " )(tp match {
838+ def toUnderlying (tp : Type )(using Context ): Type = trace(i " toUnderlying( $tp ${tp.className} ) " )(tp match {
839839 case _ : ConstantType => tp
840840 case tp : TermRef if tp.symbol.is(Module ) => tp
841841 case tp : TermRef if tp.symbol.isAllOf(EnumCase ) => tp
@@ -846,7 +846,7 @@ object SpaceEngine {
846846 })
847847
848848 def checkExhaustivity (m : Match )(using Context ): Unit = trace(i " checkExhaustivity( $m) " ) {
849- val selTyp = toUnderlying(m.selector.tpe).dealias
849+ val selTyp = toUnderlying(m.selector.tpe.stripNull() ).dealias
850850 val targetSpace = trace(i " targetSpace( $selTyp) " )(project(selTyp))
851851
852852 val patternSpace = Or (m.cases.foldLeft(List .empty[Space ]) { (acc, x) =>
@@ -879,7 +879,7 @@ object SpaceEngine {
879879 def checkReachability (m : Match )(using Context ): Unit = trace(i " checkReachability( $m) " ) {
880880 val cases = m.cases.toIndexedSeq
881881
882- val selTyp = toUnderlying(m.selector.tpe).dealias
882+ val selTyp = toUnderlying(m.selector.tpe.stripNull() ).dealias
883883
884884 val isNullable = selTyp.classSymbol.isNullableClass
885885 val targetSpace = trace(i " targetSpace( $selTyp) " )(if isNullable
0 commit comments