diff --git a/compiler/src/dotty/tools/dotc/transform/PatternMatcher.scala b/compiler/src/dotty/tools/dotc/transform/PatternMatcher.scala index 7f9e0cdca0bf..4c8429bfdffb 100644 --- a/compiler/src/dotty/tools/dotc/transform/PatternMatcher.scala +++ b/compiler/src/dotty/tools/dotc/transform/PatternMatcher.scala @@ -531,12 +531,13 @@ object PatternMatcher { private def caseDefPlan(scrutinee: Symbol, cdef: CaseDef): Plan = val CaseDef(pat, guard, body) = cdef - val caseDefBodyPlan: Plan = body match + def caseDefBodyPlan(body: Tree = body): Plan = body match + case Typed(t, _) => caseDefBodyPlan(t) case t: SubMatch => subMatchPlan(t) case _ => ResultPlan(body) val onSuccess: Plan = - if guard.isEmpty then caseDefBodyPlan - else TestPlan(GuardTest, guard, guard.span, caseDefBodyPlan) + if guard.isEmpty then caseDefBodyPlan() + else TestPlan(GuardTest, guard, guard.span, caseDefBodyPlan()) patternPlan(scrutinee, pat, onSuccess) end caseDefPlan diff --git a/compiler/test/dotc/scoverage-ignore.excludelist b/compiler/test/dotc/scoverage-ignore.excludelist index 22cc1a29adb4..637586972b0d 100644 --- a/compiler/test/dotc/scoverage-ignore.excludelist +++ b/compiler/test/dotc/scoverage-ignore.excludelist @@ -84,3 +84,4 @@ tailrec.scala traitParams.scala i25460.scala matrix.scala +i25746.scala diff --git a/tests/pos/i25746.scala b/tests/pos/i25746.scala new file mode 100644 index 000000000000..2cd11644d50d --- /dev/null +++ b/tests/pos/i25746.scala @@ -0,0 +1,9 @@ +import scala.language.experimental.subCases + +@main def test = + val r1 = "^foo".r.unanchored + val r2 = "bar$".r.unanchored + + val result1 = "foo bar" match + case s @ r1() if s match { case r2() => s } + case _ => "no"