Skip to content

Commit a5878de

Browse files
DarkDimiusodersky
authored andcommitted
Fix pattern matcher double defining symbols used in type tests that are known to succeed.
1 parent 8b0f2d6 commit a5878de

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -393,12 +393,14 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans
393393
val res: Tree
394394

395395
val nextBinder: Symbol
396-
lazy val introducedRebindings =
396+
lazy val introducedRebindings = /*
397397
if(nextBinder ne prevBinder) Rebindings(prevBinder, nextBinder)
398-
else NoRebindings
398+
else */ NoRebindings
399399

400400
def chainBefore(next: Tree)(casegen: Casegen): Tree =
401-
/*atPos(pos)(*/casegen.flatMapCond(cond, res, nextBinder, next)//)
401+
if(prevBinder ne nextBinder) // happens when typeTest is known to succeed
402+
/*atPos(pos)(*/casegen.flatMapCond(cond, res, nextBinder, next)//)
403+
else casegen.flatMapGuard(cond, next)
402404
}
403405

404406
// unless we're optimizing, emit local variable bindings for all subpatterns of extractor/case class patterns

0 commit comments

Comments
 (0)