diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/matching/ParallelMatching.scala | 13 | ||||
-rw-r--r-- | test/files/pos/bug3136.scala | 19 | ||||
-rw-r--r-- | test/pending/run/bug1697.scala (renamed from test/files/run/bug1697.scala) | 0 |
3 files changed, 27 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala index 4a000b1901..ab7b9adf72 100644 --- a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala +++ b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala @@ -537,7 +537,10 @@ trait ParallelMatching extends ast.TreeDSL case Pattern(LIT(null), _) if !(p =:= s) => (None, passr) // (1) case x if isObjectTest => (passl(), None) // (2) case Pattern(Typed(pp, _), _) if sMatchesP => (typed(pp), None) // (4) - case Pattern(_: UnApply, _) => (passl(), passr) + // The next line used to be this which "fixed" 1697 but introduced + // numerous regressions including #3136. + // case Pattern(_: UnApply, _) => (passl(), passr) + case Pattern(_: UnApply, _) => (None, passr) case x if !x.isDefault && sMatchesP => (subs(), None) case x if x.isDefault || pMatchesS => (passl(), passr) case _ => (None, passr) @@ -692,8 +695,8 @@ trait ParallelMatching extends ast.TreeDSL } def createLabelBody(index: Int, pvgroup: PatternVarGroup) = { - def args = pvgroup.syms - def vdefs = pvgroup.valDefs + val args = pvgroup.syms + val vdefs = pvgroup.valDefs val name = "body%" + index require(_labelSym == null) @@ -712,8 +715,8 @@ trait ParallelMatching extends ast.TreeDSL } def getLabelBody(pvgroup: PatternVarGroup): Tree = { - def idents = pvgroup map (_.rhs) - def vdefs = pvgroup.valDefs + val idents = pvgroup map (_.rhs) + val vdefs = pvgroup.valDefs referenceCount += 1 // if (idents.size != labelParamTypes.size) // consistencyFailure(idents, vdefs) diff --git a/test/files/pos/bug3136.scala b/test/files/pos/bug3136.scala new file mode 100644 index 0000000000..33d42c2f3c --- /dev/null +++ b/test/files/pos/bug3136.scala @@ -0,0 +1,19 @@ +class Type +class Symbol +case class PolyType(tps: List[Symbol], res: Type) extends Type +class OtherType extends Type + +// case class NullaryMethodType(tp: Type) extends Type + +object NullaryMethodType { + def apply(resTpe: Type): Type = PolyType(List(), resTpe) + def unapply(tp: Type): Option[(Type)] = None +} + +object Test { + def TEST(tp: Type): String = + tp match { + case PolyType(ps1, PolyType(ps2, res @ PolyType(a, b))) => "1"+tp // couldn't find a simpler version that still crashes + case NullaryMethodType(meh) => "2"+meh + } +} diff --git a/test/files/run/bug1697.scala b/test/pending/run/bug1697.scala index 01590dd405..01590dd405 100644 --- a/test/files/run/bug1697.scala +++ b/test/pending/run/bug1697.scala |