aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--project/Build.scala2
-rw-r--r--src/dotty/tools/backend/jvm/DottyBackendInterface.scala2
-rw-r--r--src/dotty/tools/dotc/ast/Trees.scala2
-rw-r--r--src/dotty/tools/dotc/core/Contexts.scala37
-rw-r--r--src/dotty/tools/dotc/core/NameOps.scala9
-rw-r--r--src/dotty/tools/dotc/core/Names.scala21
-rw-r--r--src/dotty/tools/dotc/core/StdNames.scala3
-rw-r--r--src/dotty/tools/dotc/core/SymDenotations.scala8
-rw-r--r--src/dotty/tools/dotc/core/Symbols.scala2
-rw-r--r--src/dotty/tools/dotc/core/Types.scala2
-rw-r--r--src/dotty/tools/dotc/transform/ElimErasedValueType.scala3
-rw-r--r--src/dotty/tools/dotc/transform/FunctionalInterfaces.scala7
-rw-r--r--src/dotty/tools/dotc/transform/Memoize.scala22
-rw-r--r--src/dotty/tools/dotc/transform/Mixin.scala8
-rw-r--r--src/dotty/tools/dotc/transform/PatternMatcher.scala8
-rw-r--r--src/dotty/tools/dotc/transform/TreeChecker.scala20
-rw-r--r--test/dotc/tests.scala2
-rw-r--r--tests/pending/pos/i743.scala6
-rw-r--r--tests/pending/run/StackMap.scala7
-rw-r--r--tests/run/Course-2002-02.check (renamed from tests/pending/run/Course-2002-02.check)0
-rw-r--r--tests/run/Course-2002-02.scala (renamed from tests/pending/run/Course-2002-02.scala)0
-rw-r--r--tests/run/Course-2002-07.check (renamed from tests/pending/run/Course-2002-07.check)0
-rw-r--r--tests/run/Course-2002-07.scala (renamed from tests/pending/run/Course-2002-07.scala)0
-rw-r--r--tests/run/Course-2002-13.check (renamed from tests/pending/run/Course-2002-13.check)0
-rw-r--r--tests/run/Course-2002-13.scala (renamed from tests/pending/run/Course-2002-13.scala)0
-rw-r--r--tests/run/WeakHashSetTest.scala (renamed from tests/pending/run/WeakHashSetTest.scala)0
-rw-r--r--tests/run/bytecodecs.scala (renamed from tests/pending/run/bytecodecs.scala)0
-rw-r--r--tests/run/caseclasses.check (renamed from tests/pending/run/caseclasses.check)0
-rw-r--r--tests/run/caseclasses.scala (renamed from tests/pending/run/caseclasses.scala)0
-rw-r--r--tests/run/dead-code-elimination.flags (renamed from tests/pending/run/dead-code-elimination.flags)0
-rw-r--r--tests/run/dead-code-elimination.scala (renamed from tests/pending/run/dead-code-elimination.scala)0
-rw-r--r--tests/run/exceptions-2.check (renamed from tests/pending/run/exceptions-2.check)3
-rw-r--r--tests/run/exceptions-2.scala (renamed from tests/pending/run/exceptions-2.scala)0
-rw-r--r--tests/run/exceptions.check (renamed from tests/pending/run/exceptions.check)0
-rw-r--r--tests/run/exceptions.scala (renamed from tests/pending/run/exceptions.scala)0
-rw-r--r--tests/run/hashCodeDistribution.scala (renamed from tests/pending/run/hashCodeDistribution.scala)0
-rw-r--r--tests/run/i744.check1
-rw-r--r--tests/run/i744.scala8
-rw-r--r--tests/run/matcharraytail.check (renamed from tests/pending/run/matcharraytail.check)0
-rw-r--r--tests/run/matcharraytail.scala (renamed from tests/pending/run/matcharraytail.scala)0
-rw-r--r--tests/run/matchonstream.check (renamed from tests/pending/run/matchonstream.check)0
-rw-r--r--tests/run/matchonstream.scala (renamed from tests/pending/run/matchonstream.scala)0
-rw-r--r--tests/run/mixin-bridge-methods.scala (renamed from tests/pending/run/mixin-bridge-methods.scala)0
-rw-r--r--tests/run/null-and-intersect.check (renamed from tests/pending/run/null-and-intersect.check)0
-rw-r--r--tests/run/null-and-intersect.scala (renamed from tests/pending/run/null-and-intersect.scala)0
-rw-r--r--tests/run/option-fold.check (renamed from tests/pending/run/option-fold.check)0
-rw-r--r--tests/run/option-fold.scala (renamed from tests/pending/run/option-fold.scala)0
-rw-r--r--tests/run/proxy.check (renamed from tests/pending/run/proxy.check)0
-rw-r--r--tests/run/proxy.scala (renamed from tests/pending/run/proxy.scala)0
-rw-r--r--tests/run/range.scala (renamed from tests/pending/run/range.scala)0
-rw-r--r--tests/run/t0325.check (renamed from tests/pending/run/t0325.check)0
-rw-r--r--tests/run/t0325.scala (renamed from tests/pending/run/t0325.scala)0
-rw-r--r--tests/run/t0631.check (renamed from tests/pending/run/t0631.check)0
-rw-r--r--tests/run/t0631.scala (renamed from tests/pending/run/t0631.scala)0
-rw-r--r--tests/run/t1333.check (renamed from tests/pending/run/t1333.check)0
-rw-r--r--tests/run/t1333.scala (renamed from tests/pending/run/t1333.scala)0
-rw-r--r--tests/run/t1697.scala (renamed from tests/pending/run/t1697.scala)0
-rw-r--r--tests/run/t1909b.scala (renamed from tests/pending/run/t1909b.scala)0
-rw-r--r--tests/run/t2074_2.check (renamed from tests/pending/run/t2074_2.check)0
-rw-r--r--tests/run/t2074_2.scala (renamed from tests/pending/run/t2074_2.scala)0
-rw-r--r--tests/run/t2175.scala (renamed from tests/pending/run/t2175.scala)0
-rw-r--r--tests/run/t2316_run.scala (renamed from tests/pending/run/t2316_run.scala)0
-rw-r--r--tests/run/t2417.check (renamed from tests/pending/run/t2417.check)0
-rw-r--r--tests/run/t2417.scala (renamed from tests/pending/run/t2417.scala)0
-rw-r--r--tests/run/t2544.check (renamed from tests/pending/run/t2544.check)0
-rw-r--r--tests/run/t2544.scala (renamed from tests/pending/run/t2544.scala)0
-rw-r--r--tests/run/t2788.check (renamed from tests/pending/run/t2788.check)0
-rw-r--r--tests/run/t2788.scala (renamed from tests/pending/run/t2788.scala)0
-rw-r--r--tests/run/t3038d.flags (renamed from tests/pending/run/t3038d.flags)0
-rw-r--r--tests/run/t3038d.scala (renamed from tests/pending/run/t3038d.scala)0
-rw-r--r--tests/run/t3580.scala (renamed from tests/pending/run/t3580.scala)0
-rw-r--r--tests/run/t3613.scala (renamed from tests/pending/run/t3613.scala)0
-rw-r--r--tests/run/t3714.scala (renamed from tests/pending/run/t3714.scala)0
-rw-r--r--tests/run/t3832.scala (renamed from tests/pending/run/t3832.scala)0
-rw-r--r--tests/run/t3984.scala (renamed from tests/pending/run/t3984.scala)0
-rw-r--r--tests/run/t4415.scala (renamed from tests/pending/run/t4415.scala)0
-rw-r--r--tests/run/t4482.check (renamed from tests/pending/run/t4482.check)0
-rw-r--r--tests/run/t4482.scala (renamed from tests/pending/run/t4482.scala)0
-rw-r--r--tests/run/t4753.check (renamed from tests/pending/run/t4753.check)0
-rw-r--r--tests/run/t4753.scala (renamed from tests/pending/run/t4753.scala)0
-rw-r--r--tests/run/t4859.check (renamed from tests/pending/run/t4859.check)0
-rw-r--r--tests/run/t4859.scala (renamed from tests/pending/run/t4859.scala)0
-rw-r--r--tests/run/t4871.check (renamed from tests/pending/run/t4871.check)0
-rw-r--r--tests/run/t4871.scala (renamed from tests/pending/run/t4871.scala)0
-rw-r--r--tests/run/t5158.check (renamed from tests/pending/run/t5158.check)0
-rw-r--r--tests/run/t5158.scala (renamed from tests/pending/run/t5158.scala)0
-rw-r--r--tests/run/t5293-map.scala (renamed from tests/pending/run/t5293-map.scala)0
-rw-r--r--tests/run/t5293.scala (renamed from tests/pending/run/t5293.scala)0
-rw-r--r--tests/run/t5407.check (renamed from tests/pending/run/t5407.check)0
-rw-r--r--tests/run/t5407.scala (renamed from tests/pending/run/t5407.scala)0
-rw-r--r--tests/run/t6070.check (renamed from tests/pending/run/t6070.check)0
-rw-r--r--tests/run/t6070.scala (renamed from tests/pending/run/t6070.scala)0
-rw-r--r--tests/run/t6198.scala (renamed from tests/pending/run/t6198.scala)0
-rw-r--r--tests/run/t6206.check (renamed from tests/pending/run/t6206.check)0
-rw-r--r--tests/run/t6206.scala (renamed from tests/pending/run/t6206.scala)0
-rw-r--r--tests/run/t6253a.scala (renamed from tests/pending/run/t6253a.scala)0
-rw-r--r--tests/run/t6253b.scala (renamed from tests/pending/run/t6253b.scala)0
-rw-r--r--tests/run/t6253c.scala (renamed from tests/pending/run/t6253c.scala)0
-rw-r--r--tests/run/t6337a.scala (renamed from tests/pending/run/t6337a.scala)0
-rw-r--r--tests/run/t6385.scala (renamed from tests/pending/run/t6385.scala)0
-rw-r--r--tests/run/t6628.check (renamed from tests/pending/run/t6628.check)0
-rw-r--r--tests/run/t6628.scala (renamed from tests/pending/run/t6628.scala)0
-rw-r--r--tests/run/t6793.scala (renamed from tests/pending/run/t6793.scala)0
-rw-r--r--tests/run/t7200.scala (renamed from tests/pending/run/t7200.scala)0
-rw-r--r--tests/run/t7214.scala (renamed from tests/pending/run/t7214.scala)0
-rw-r--r--tests/run/t7571.scala (renamed from tests/pending/run/t7571.scala)0
-rw-r--r--tests/run/t8177f.scala (renamed from tests/pending/run/t8177f.scala)0
-rw-r--r--tests/run/t8197.scala (renamed from tests/pending/run/t8197.scala)0
-rw-r--r--tests/run/try-catch-unify.check (renamed from tests/pending/run/try-catch-unify.check)0
-rw-r--r--tests/run/try-catch-unify.scala (renamed from tests/pending/run/try-catch-unify.scala)0
-rw-r--r--tests/run/unapplyArray.scala (renamed from tests/pending/run/unapplyArray.scala)0
-rw-r--r--tests/run/value-class-extractor.scala2
-rw-r--r--tests/run/verify-ctor.check (renamed from tests/pending/run/verify-ctor.check)0
-rw-r--r--tests/run/verify-ctor.scala (renamed from tests/pending/run/verify-ctor.scala)0
-rw-r--r--tests/run/virtpatmat_try.check (renamed from tests/pending/run/virtpatmat_try.check)0
-rw-r--r--tests/run/virtpatmat_try.flags (renamed from tests/pending/run/virtpatmat_try.flags)0
-rw-r--r--tests/run/virtpatmat_try.scala (renamed from tests/pending/run/virtpatmat_try.scala)0
117 files changed, 137 insertions, 48 deletions
diff --git a/project/Build.scala b/project/Build.scala
index 9c80fdc11..cc8fbfb69 100644
--- a/project/Build.scala
+++ b/project/Build.scala
@@ -42,7 +42,7 @@ object DottyBuild extends Build {
resolvers += Resolver.sonatypeRepo("releases"),
// get libraries onboard
- partestDeps := Seq("me.d-d" % "scala-compiler" % "2.11.5-20150619-173733-3bcd390afa",
+ partestDeps := Seq("me.d-d" % "scala-compiler" % "2.11.5-20150714-145300-2ad68448c5",
"org.scala-lang" % "scala-reflect" % scalaVersion.value,
"org.scala-lang" % "scala-library" % scalaVersion.value % "test"),
libraryDependencies ++= partestDeps.value,
diff --git a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
index 8136b3dcd..e39541e6c 100644
--- a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
+++ b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
@@ -784,7 +784,7 @@ class DottyBackendInterface()(implicit ctx: Context) extends BackendInterface{
def decls: List[Symbol] = tp.decls.map(_.symbol).toList
def members: List[Symbol] =
- tp.memberDenots(takeAllFilter, (name, buf) => buf ++= member(name).alternatives).map(_.symbol).toList
+ tp.memberDenots(takeAllFilter, (name, buf) => buf ++= tp.member(name).alternatives).map(_.symbol).toList
def typeSymbol: Symbol = tp.widenDealias.typeSymbol
diff --git a/src/dotty/tools/dotc/ast/Trees.scala b/src/dotty/tools/dotc/ast/Trees.scala
index f63d32b14..a10dfaa16 100644
--- a/src/dotty/tools/dotc/ast/Trees.scala
+++ b/src/dotty/tools/dotc/ast/Trees.scala
@@ -223,7 +223,7 @@ object Trees {
override def toText(printer: Printer) = printer.toText(this)
- override def hashCode(): Int = System.identityHashCode(this)
+ override def hashCode(): Int = uniqueId // for debugging; was: System.identityHashCode(this)
override def equals(that: Any) = this eq that.asInstanceOf[AnyRef]
}
diff --git a/src/dotty/tools/dotc/core/Contexts.scala b/src/dotty/tools/dotc/core/Contexts.scala
index 206ef9d8b..15c7b4b11 100644
--- a/src/dotty/tools/dotc/core/Contexts.scala
+++ b/src/dotty/tools/dotc/core/Contexts.scala
@@ -177,25 +177,26 @@ object Contexts {
/** The new implicit references that are introduced by this scope */
private var implicitsCache: ContextualImplicits = null
def implicits: ContextualImplicits = {
- if (implicitsCache == null )
- implicitsCache = {
- val implicitRefs: List[TermRef] =
- if (isClassDefContext)
- try owner.thisType.implicitMembers
- catch {
- case ex: CyclicReference => Nil
- }
- else if (isImportContext) importInfo.importedImplicits
- else if (isNonEmptyScopeContext) scope.implicitDecls
- else Nil
- val outerImplicits =
- if (isImportContext && importInfo.hiddenRoot.exists)
- outer.implicits exclude importInfo.hiddenRoot
- else
- outer.implicits
- if (implicitRefs.isEmpty) outerImplicits
- else new ContextualImplicits(implicitRefs, outerImplicits)(this)
+ if (implicitsCache == null ) {
+ val outerImplicits =
+ if (isImportContext && importInfo.hiddenRoot.exists)
+ outer.implicits exclude importInfo.hiddenRoot
+ else
+ outer.implicits
+ try
+ implicitsCache = {
+ val implicitRefs: List[TermRef] =
+ if (isClassDefContext) owner.thisType.implicitMembers
+ else if (isImportContext) importInfo.importedImplicits
+ else if (isNonEmptyScopeContext) scope.implicitDecls
+ else Nil
+ if (implicitRefs.isEmpty) outerImplicits
+ else new ContextualImplicits(implicitRefs, outerImplicits)(this)
+ }
+ catch {
+ case ex: CyclicReference => implicitsCache = outerImplicits
}
+ }
implicitsCache
}
diff --git a/src/dotty/tools/dotc/core/NameOps.scala b/src/dotty/tools/dotc/core/NameOps.scala
index dc90a8d3b..593d5f036 100644
--- a/src/dotty/tools/dotc/core/NameOps.scala
+++ b/src/dotty/tools/dotc/core/NameOps.scala
@@ -241,7 +241,7 @@ object NameOps {
case nme.clone_ => nme.clone_
}
- def specializedFor(returnType: Types.Type, args: List[Types.Type])(implicit ctx: Context): name.ThisName = {
+ def specializedFor(classTargs: List[Types.Type], classTargsNames: List[Name], methodTargs: List[Types.Type], methodTarsNames: List[Name])(implicit ctx: Context): name.ThisName = {
def typeToTag(tp: Types.Type): Name = {
tp.classSymbol match {
@@ -258,9 +258,12 @@ object NameOps {
}
}
+ val methodTags: Seq[Name] = (methodTargs zip methodTarsNames).sortBy(_._2).map(x => typeToTag(x._1))
+ val classTags: Seq[Name] = (classTargs zip classTargsNames).sortBy(_._2).map(x => typeToTag(x._1))
+
name.fromName(name ++ nme.specializedTypeNames.prefix ++
- args.map(typeToTag).foldRight(typeToTag(returnType))(_ ++ _) ++
- nme.specializedTypeNames.suffix)
+ methodTags.fold(nme.EMPTY)(_ ++ _) ++ nme.specializedTypeNames.separator ++
+ classTags.fold(nme.EMPTY)(_ ++ _) ++ nme.specializedTypeNames.suffix)
}
/** If name length exceeds allowable limit, replace part of it by hash */
diff --git a/src/dotty/tools/dotc/core/Names.scala b/src/dotty/tools/dotc/core/Names.scala
index 3ff10598d..12def1076 100644
--- a/src/dotty/tools/dotc/core/Names.scala
+++ b/src/dotty/tools/dotc/core/Names.scala
@@ -348,4 +348,25 @@ object Names {
StringBuilder.newBuilder.mapResult(s => from.fromChars(s.toCharArray, 0, s.length))
def apply(): Builder[Char, Name] = termNameBuilder
}
+
+ implicit val NameOrdering: Ordering[Name] = new Ordering[Name] {
+ def compare(x: Name, y: Name): Int = {
+ if (x.isTermName && y.isTypeName) 1
+ else if (x.isTypeName && y.isTermName) -1
+ else if (x eq y) 0
+ else {
+ val until = x.length min y.length
+ var i = 0
+
+ while (i < until && x(i) == y(i)) i = i + 1
+
+ if (i < until) {
+ if (x(i) < y(i)) -1
+ else /*(x(i) > y(i))*/ 1
+ } else {
+ x.length - y.length
+ }
+ }
+ }
+ }
}
diff --git a/src/dotty/tools/dotc/core/StdNames.scala b/src/dotty/tools/dotc/core/StdNames.scala
index eb1a73625..577e1ebf3 100644
--- a/src/dotty/tools/dotc/core/StdNames.scala
+++ b/src/dotty/tools/dotc/core/StdNames.scala
@@ -559,7 +559,8 @@ object StdNames {
final val Void: N = "V"
final val Object: N = "L"
- final val prefix: N = "$mc"
+ final val prefix: N = "$m"
+ final val separator: N = "c"
final val suffix: N = "$sp"
}
diff --git a/src/dotty/tools/dotc/core/SymDenotations.scala b/src/dotty/tools/dotc/core/SymDenotations.scala
index 53973b587..985d1a9c7 100644
--- a/src/dotty/tools/dotc/core/SymDenotations.scala
+++ b/src/dotty/tools/dotc/core/SymDenotations.scala
@@ -404,6 +404,14 @@ object SymDenotations {
name.toTermName == nme.COMPANION_CLASS_METHOD ||
name.toTermName == nme.COMPANION_MODULE_METHOD
+ /** Is this a syntetic method that represents conversions between representations of a value class
+ * These methods are generated in ExtensionMethods
+ * and used in ElimErasedValueType.
+ */
+ final def isValueClassConvertMethod(implicit ctx: Context) =
+ name.toTermName == nme.U2EVT ||
+ name.toTermName == nme.EVT2U
+
/** Is symbol a primitive value class? */
def isPrimitiveValueClass(implicit ctx: Context) = defn.ScalaValueClasses contains symbol
diff --git a/src/dotty/tools/dotc/core/Symbols.scala b/src/dotty/tools/dotc/core/Symbols.scala
index ce308459a..2b4f806dd 100644
--- a/src/dotty/tools/dotc/core/Symbols.scala
+++ b/src/dotty/tools/dotc/core/Symbols.scala
@@ -503,6 +503,8 @@ object Symbols {
def showKind(implicit ctx: Context): String = ctx.kindString(this)
def showName(implicit ctx: Context): String = ctx.nameString(this)
def showFullName(implicit ctx: Context): String = ctx.fullNameString(this)
+
+ override def hashCode() = id // for debugging.
}
type TermSymbol = Symbol { type ThisName = TermName }
diff --git a/src/dotty/tools/dotc/core/Types.scala b/src/dotty/tools/dotc/core/Types.scala
index 4d6a7e22b..0e9f5d9b2 100644
--- a/src/dotty/tools/dotc/core/Types.scala
+++ b/src/dotty/tools/dotc/core/Types.scala
@@ -1296,7 +1296,7 @@ object Types {
case d: SymDenotation =>
if (this.isInstanceOf[WithFixedSym]) d.current
else if (d.validFor.runId == ctx.runId || ctx.stillValid(d))
- if (prefix.isTightPrefix(d.owner) || d.isConstructor) d.current
+ if (d.exists && prefix.isTightPrefix(d.owner) || d.isConstructor) d.current
else recomputeMember(d) // symbol could have been overridden, recompute membership
else {
val newd = loadDenot
diff --git a/src/dotty/tools/dotc/transform/ElimErasedValueType.scala b/src/dotty/tools/dotc/transform/ElimErasedValueType.scala
index 8a18c9c17..a3f8b56ff 100644
--- a/src/dotty/tools/dotc/transform/ElimErasedValueType.scala
+++ b/src/dotty/tools/dotc/transform/ElimErasedValueType.scala
@@ -56,12 +56,11 @@ class ElimErasedValueType extends MiniPhaseTransform with InfoTransformer {
override def transformApply(tree: Apply)(implicit ctx: Context, info: TransformerInfo): Tree = {
val Apply(fun, args) = tree
- val name = fun.symbol.name
// The casts to and from ErasedValueType are no longer needed once ErasedValueType
// has been eliminated.
val t =
- if ((name eq nme.U2EVT) || (name eq nme.EVT2U))
+ if (fun.symbol.isValueClassConvertMethod)
args.head
else
tree
diff --git a/src/dotty/tools/dotc/transform/FunctionalInterfaces.scala b/src/dotty/tools/dotc/transform/FunctionalInterfaces.scala
index 03b2910ae..5fd89314a 100644
--- a/src/dotty/tools/dotc/transform/FunctionalInterfaces.scala
+++ b/src/dotty/tools/dotc/transform/FunctionalInterfaces.scala
@@ -63,7 +63,12 @@ class FunctionalInterfaces extends MiniPhaseTransform {
val m = tree.meth.tpe.widen.asInstanceOf[MethodType]
if (shouldSpecialize(m)) {
- val interfaceName = (functionName ++ m.paramTypes.length.toString).specializedFor(m.resultType, m.paramTypes)
+ val functionSymbol = tree.tpe.widenDealias.classSymbol
+ val names = ctx.atPhase(ctx.erasurePhase) {
+ implicit ctx => functionSymbol.typeParams.map(_.name)
+ }
+ val interfaceName = (functionName ++ m.paramTypes.length.toString).specializedFor(m.paramTypes ::: m.resultType :: Nil, names, Nil, Nil)
+
// symbols loaded from classpath aren't defined in periods earlier than when they where loaded
val interface = ctx.withPhase(ctx.typerPhase).getClassIfDefined(functionPackage ++ interfaceName)
if (interface.exists) {
diff --git a/src/dotty/tools/dotc/transform/Memoize.scala b/src/dotty/tools/dotc/transform/Memoize.scala
index cf3011bc8..728005cab 100644
--- a/src/dotty/tools/dotc/transform/Memoize.scala
+++ b/src/dotty/tools/dotc/transform/Memoize.scala
@@ -45,14 +45,20 @@ import Decorators._
override def transformDefDef(tree: DefDef)(implicit ctx: Context, info: TransformerInfo): Tree = {
val sym = tree.symbol
- def newField = ctx.newSymbol(
- owner = ctx.owner,
- name = sym.name.asTermName.fieldName,
- flags = Private | (if (sym is Stable) EmptyFlags else Mutable),
- info = sym.info.resultType,
- coord = tree.pos)
- .withAnnotationsCarrying(sym, defn.FieldMetaAnnot)
- .enteredAfter(thisTransform)
+ def newField = {
+ val fieldType =
+ if (sym.isGetter) sym.info.resultType
+ else /*sym.isSetter*/ sym.info.firstParamTypes.head
+
+ ctx.newSymbol(
+ owner = ctx.owner,
+ name = sym.name.asTermName.fieldName,
+ flags = Private | (if (sym is Stable) EmptyFlags else Mutable),
+ info = fieldType,
+ coord = tree.pos)
+ .withAnnotationsCarrying(sym, defn.FieldMetaAnnot)
+ .enteredAfter(thisTransform)
+ }
/** Can be used to filter annotations on getters and setters; not used yet */
def keepAnnotations(denot: SymDenotation, meta: ClassSymbol) = {
diff --git a/src/dotty/tools/dotc/transform/Mixin.scala b/src/dotty/tools/dotc/transform/Mixin.scala
index bebaf44f4..ae4e26177 100644
--- a/src/dotty/tools/dotc/transform/Mixin.scala
+++ b/src/dotty/tools/dotc/transform/Mixin.scala
@@ -98,7 +98,7 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[Erasure])
override def transformSym(sym: SymDenotation)(implicit ctx: Context): SymDenotation =
- if (sym.is(Accessor, butNot = Deferred) && sym.owner.is(Trait))
+ if (sym.is(Accessor, butNot = Deferred | Lazy) && sym.owner.is(Trait))
sym.copySymDenotation(initFlags = sym.flags &~ ParamAccessor | Deferred).ensureNotPrivate
else if (sym.isConstructor && sym.owner.is(Trait))
sym.copySymDenotation(
@@ -108,8 +108,8 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
sym
private def initializer(sym: Symbol)(implicit ctx: Context): TermSymbol = {
- val initName = InitializerName(sym.name.asTermName)
- sym.owner.info.decl(initName).symbol
+ val initName = if(!sym.is(Lazy)) InitializerName(sym.name.asTermName) else sym.name.asTermName
+ sym.owner.info.decl(initName).suchThat(_.is(Lazy) == sym.is(Lazy)).symbol
.orElse(
ctx.newSymbol(
sym.owner,
@@ -229,7 +229,7 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
def setters(mixin: ClassSymbol): List[Tree] =
for (setter <- mixin.info.decls.filter(setr => setr.isSetter && !wasDeferred(setr)).toList)
- yield DefDef(implementation(setter.asTerm), unitLiteral.withPos(cls.pos))
+ yield transformFollowing(DefDef(implementation(setter.asTerm), unitLiteral.withPos(cls.pos)))
cpy.Template(impl)(
constr =
diff --git a/src/dotty/tools/dotc/transform/PatternMatcher.scala b/src/dotty/tools/dotc/transform/PatternMatcher.scala
index af8da01ff..2df7a9825 100644
--- a/src/dotty/tools/dotc/transform/PatternMatcher.scala
+++ b/src/dotty/tools/dotc/transform/PatternMatcher.scala
@@ -440,7 +440,11 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans
def emitVars = storedBinders.nonEmpty
- private lazy val (stored, substed) = (subPatBinders, subPatRefs).zipped.partition{ case (sym, _) => storedBinders(sym) }
+ lazy val storedSubsted = (subPatBinders, subPatRefs).zipped.partition{ case (sym, _) => storedBinders(sym) }
+
+ def stored = storedSubsted._1
+
+ def substed = storedSubsted._2
// dd: this didn't yet trigger error. But I believe it would. if this causes double denition of symbol error this can be replaced with NoRebindings
protected lazy val introducedRebindings: Rebindings = if (!emitVars) Rebindings(subPatBinders, subPatRefs)
@@ -1443,7 +1447,7 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans
// require (nbSubPats > 0 && (!lastIsStar || isSeq))
protected def subPatRefs(binder: Symbol): List[Tree] = {
val refs = if (totalArity > 0 && isSeq) subPatRefsSeq(binder)
- else if (totalArity > 1 && !isSeq) productElemsToN(binder, totalArity)
+ else if (binder.info.member(nme._1).exists && !isSeq) productElemsToN(binder, totalArity)
else ref(binder):: Nil
refs
}
diff --git a/src/dotty/tools/dotc/transform/TreeChecker.scala b/src/dotty/tools/dotc/transform/TreeChecker.scala
index b76f04b58..a1847e456 100644
--- a/src/dotty/tools/dotc/transform/TreeChecker.scala
+++ b/src/dotty/tools/dotc/transform/TreeChecker.scala
@@ -2,6 +2,7 @@ package dotty.tools.dotc
package transform
import TreeTransforms._
+import core.Names.Name
import core.DenotTransformers._
import core.Denotations._
import core.SymDenotations._
@@ -42,6 +43,12 @@ class TreeChecker extends Phase with SymTransformer {
private val seenClasses = collection.mutable.HashMap[String, Symbol]()
private val seenModuleVals = collection.mutable.HashMap[String, Symbol]()
+ def isValidJVMName(name: Name) =
+ !name.exists(c => c == '.' || c == ';' || c =='[' || c == '/')
+
+ def isValidJVMMethodName(name: Name) =
+ !name.exists(c => c == '.' || c == ';' || c =='[' || c == '/' || c == '<' || c == '>')
+
def printError(str: String)(implicit ctx: Context) = {
ctx.println(Console.RED + "[error] " + Console.WHITE + str)
}
@@ -130,6 +137,7 @@ class TreeChecker extends Phase with SymTransformer {
def withDefinedSym[T](tree: untpd.Tree)(op: => T)(implicit ctx: Context): T = tree match {
case tree: DefTree =>
val sym = tree.symbol
+ assert(isValidJVMName(sym.name), s"${sym.fullName} name is invalid on jvm")
everDefinedSyms.get(sym) match {
case Some(t) =>
if (t ne tree)
@@ -257,12 +265,24 @@ class TreeChecker extends Phase with SymTransformer {
assert(cls.primaryConstructor == constr.symbol, i"mismatch, primary constructor ${cls.primaryConstructor}, in tree = ${constr.symbol}")
checkOwner(impl)
checkOwner(impl.constr)
+
+ def isNonMagicalMethod(x: Symbol) =
+ x.is(Method) &&
+ !x.isCompanionMethod &&
+ !x.isValueClassConvertMethod &&
+ x != defn.newRefArrayMethod
+
+ val symbolsNotDefined = cls.classInfo.decls.toSet.filter(isNonMagicalMethod) -- impl.body.map(_.symbol) - constr.symbol
+
+ assert(symbolsNotDefined.isEmpty, i" $cls tree does not define methods: $symbolsNotDefined")
+
super.typedClassDef(cdef, cls)
}
override def typedDefDef(ddef: untpd.DefDef, sym: Symbol)(implicit ctx: Context) =
withDefinedSyms(ddef.tparams) {
withDefinedSymss(ddef.vparamss) {
+ if (!sym.isClassConstructor) assert(isValidJVMMethodName(sym.name), s"${sym.fullName} name is invalid on jvm")
super.typedDefDef(ddef, sym)
}
}
diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala
index 50fa90d53..0284a8714 100644
--- a/test/dotc/tests.scala
+++ b/test/dotc/tests.scala
@@ -154,7 +154,7 @@ class tests extends CompilerTest {
@Test def run_all = runFiles(runDir)
- @Test def dotty = compileDir(dottyDir, "tools", "-deep" :: "-Ycheck-reentrant" :: allowDeepSubtypes ++ twice) // note the -deep argument
+ @Test def dotty = compileDir(dottyDir, ".", "-deep" :: "-Ycheck-reentrant" :: allowDeepSubtypes) // note the -deep argument
@Test def dotc_ast = compileDir(dotcDir, "ast")
@Test def dotc_config = compileDir(dotcDir, "config")
diff --git a/tests/pending/pos/i743.scala b/tests/pending/pos/i743.scala
new file mode 100644
index 000000000..8fe522cee
--- /dev/null
+++ b/tests/pending/pos/i743.scala
@@ -0,0 +1,6 @@
+object NonLocalReturn {
+ def foo(a: List[Int]): Int = {
+ a.foreach(x => return x)
+ 0
+ }
+}
diff --git a/tests/pending/run/StackMap.scala b/tests/pending/run/StackMap.scala
new file mode 100644
index 000000000..5220758fe
--- /dev/null
+++ b/tests/pending/run/StackMap.scala
@@ -0,0 +1,7 @@
+object Test {
+ var implicitsCache = null
+
+ def main(args: Array[String]): Unit = {
+ implicitsCache = try{null} catch { case ex: Exception => null }
+ }
+}
diff --git a/tests/pending/run/Course-2002-02.check b/tests/run/Course-2002-02.check
index 7d9695071..7d9695071 100644
--- a/tests/pending/run/Course-2002-02.check
+++ b/tests/run/Course-2002-02.check
diff --git a/tests/pending/run/Course-2002-02.scala b/tests/run/Course-2002-02.scala
index b8650108e..b8650108e 100644
--- a/tests/pending/run/Course-2002-02.scala
+++ b/tests/run/Course-2002-02.scala
diff --git a/tests/pending/run/Course-2002-07.check b/tests/run/Course-2002-07.check
index 75e956f31..75e956f31 100644
--- a/tests/pending/run/Course-2002-07.check
+++ b/tests/run/Course-2002-07.check
diff --git a/tests/pending/run/Course-2002-07.scala b/tests/run/Course-2002-07.scala
index b26eda1e0..b26eda1e0 100644
--- a/tests/pending/run/Course-2002-07.scala
+++ b/tests/run/Course-2002-07.scala
diff --git a/tests/pending/run/Course-2002-13.check b/tests/run/Course-2002-13.check
index 7664f7057..7664f7057 100644
--- a/tests/pending/run/Course-2002-13.check
+++ b/tests/run/Course-2002-13.check
diff --git a/tests/pending/run/Course-2002-13.scala b/tests/run/Course-2002-13.scala
index a596a3387..a596a3387 100644
--- a/tests/pending/run/Course-2002-13.scala
+++ b/tests/run/Course-2002-13.scala
diff --git a/tests/pending/run/WeakHashSetTest.scala b/tests/run/WeakHashSetTest.scala
index 8bcb95091..8bcb95091 100644
--- a/tests/pending/run/WeakHashSetTest.scala
+++ b/tests/run/WeakHashSetTest.scala
diff --git a/tests/pending/run/bytecodecs.scala b/tests/run/bytecodecs.scala
index 454958dfa..454958dfa 100644
--- a/tests/pending/run/bytecodecs.scala
+++ b/tests/run/bytecodecs.scala
diff --git a/tests/pending/run/caseclasses.check b/tests/run/caseclasses.check
index 7eb54ea63..7eb54ea63 100644
--- a/tests/pending/run/caseclasses.check
+++ b/tests/run/caseclasses.check
diff --git a/tests/pending/run/caseclasses.scala b/tests/run/caseclasses.scala
index f94bcab95..f94bcab95 100644
--- a/tests/pending/run/caseclasses.scala
+++ b/tests/run/caseclasses.scala
diff --git a/tests/pending/run/dead-code-elimination.flags b/tests/run/dead-code-elimination.flags
index 49d036a88..49d036a88 100644
--- a/tests/pending/run/dead-code-elimination.flags
+++ b/tests/run/dead-code-elimination.flags
diff --git a/tests/pending/run/dead-code-elimination.scala b/tests/run/dead-code-elimination.scala
index fd3f2a996..fd3f2a996 100644
--- a/tests/pending/run/dead-code-elimination.scala
+++ b/tests/run/dead-code-elimination.scala
diff --git a/tests/pending/run/exceptions-2.check b/tests/run/exceptions-2.check
index 4f8244800..9a3044cd4 100644
--- a/tests/pending/run/exceptions-2.check
+++ b/tests/run/exceptions-2.check
@@ -1,6 +1,3 @@
-exceptions-2.scala:267: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
- try { 1 } catch { case e: java.io.IOException => () }
- ^
nested1:
Innermost finally
Outermost finally
diff --git a/tests/pending/run/exceptions-2.scala b/tests/run/exceptions-2.scala
index 8d755c380..8d755c380 100644
--- a/tests/pending/run/exceptions-2.scala
+++ b/tests/run/exceptions-2.scala
diff --git a/tests/pending/run/exceptions.check b/tests/run/exceptions.check
index b959df29e..b959df29e 100644
--- a/tests/pending/run/exceptions.check
+++ b/tests/run/exceptions.check
diff --git a/tests/pending/run/exceptions.scala b/tests/run/exceptions.scala
index f0fe76946..f0fe76946 100644
--- a/tests/pending/run/exceptions.scala
+++ b/tests/run/exceptions.scala
diff --git a/tests/pending/run/hashCodeDistribution.scala b/tests/run/hashCodeDistribution.scala
index 284f3d977..284f3d977 100644
--- a/tests/pending/run/hashCodeDistribution.scala
+++ b/tests/run/hashCodeDistribution.scala
diff --git a/tests/run/i744.check b/tests/run/i744.check
new file mode 100644
index 000000000..d00491fd7
--- /dev/null
+++ b/tests/run/i744.check
@@ -0,0 +1 @@
+1
diff --git a/tests/run/i744.scala b/tests/run/i744.scala
new file mode 100644
index 000000000..4ff6c9288
--- /dev/null
+++ b/tests/run/i744.scala
@@ -0,0 +1,8 @@
+trait A{
+ private var s = 1
+ def getS = s
+}
+
+object Test extends A {
+ def main(args: Array[String]): Unit = println(getS)
+}
diff --git a/tests/pending/run/matcharraytail.check b/tests/run/matcharraytail.check
index f2844d41a..f2844d41a 100644
--- a/tests/pending/run/matcharraytail.check
+++ b/tests/run/matcharraytail.check
diff --git a/tests/pending/run/matcharraytail.scala b/tests/run/matcharraytail.scala
index 3120769f4..3120769f4 100644
--- a/tests/pending/run/matcharraytail.scala
+++ b/tests/run/matcharraytail.scala
diff --git a/tests/pending/run/matchonstream.check b/tests/run/matchonstream.check
index 3dc3aa516..3dc3aa516 100644
--- a/tests/pending/run/matchonstream.check
+++ b/tests/run/matchonstream.check
diff --git a/tests/pending/run/matchonstream.scala b/tests/run/matchonstream.scala
index 6e5556519..6e5556519 100644
--- a/tests/pending/run/matchonstream.scala
+++ b/tests/run/matchonstream.scala
diff --git a/tests/pending/run/mixin-bridge-methods.scala b/tests/run/mixin-bridge-methods.scala
index e0340ebb1..e0340ebb1 100644
--- a/tests/pending/run/mixin-bridge-methods.scala
+++ b/tests/run/mixin-bridge-methods.scala
diff --git a/tests/pending/run/null-and-intersect.check b/tests/run/null-and-intersect.check
index 81890cfef..81890cfef 100644
--- a/tests/pending/run/null-and-intersect.check
+++ b/tests/run/null-and-intersect.check
diff --git a/tests/pending/run/null-and-intersect.scala b/tests/run/null-and-intersect.scala
index 7266dabe6..7266dabe6 100644
--- a/tests/pending/run/null-and-intersect.scala
+++ b/tests/run/null-and-intersect.scala
diff --git a/tests/pending/run/option-fold.check b/tests/run/option-fold.check
index 4e3fe99f9..4e3fe99f9 100644
--- a/tests/pending/run/option-fold.check
+++ b/tests/run/option-fold.check
diff --git a/tests/pending/run/option-fold.scala b/tests/run/option-fold.scala
index 84e346ec7..84e346ec7 100644
--- a/tests/pending/run/option-fold.scala
+++ b/tests/run/option-fold.scala
diff --git a/tests/pending/run/proxy.check b/tests/run/proxy.check
index c40b3db7c..c40b3db7c 100644
--- a/tests/pending/run/proxy.check
+++ b/tests/run/proxy.check
diff --git a/tests/pending/run/proxy.scala b/tests/run/proxy.scala
index 8449b7329..8449b7329 100644
--- a/tests/pending/run/proxy.scala
+++ b/tests/run/proxy.scala
diff --git a/tests/pending/run/range.scala b/tests/run/range.scala
index ee934f627..ee934f627 100644
--- a/tests/pending/run/range.scala
+++ b/tests/run/range.scala
diff --git a/tests/pending/run/t0325.check b/tests/run/t0325.check
index 85fe91dac..85fe91dac 100644
--- a/tests/pending/run/t0325.check
+++ b/tests/run/t0325.check
diff --git a/tests/pending/run/t0325.scala b/tests/run/t0325.scala
index ea6180306..ea6180306 100644
--- a/tests/pending/run/t0325.scala
+++ b/tests/run/t0325.scala
diff --git a/tests/pending/run/t0631.check b/tests/run/t0631.check
index 0a7d5e499..0a7d5e499 100644
--- a/tests/pending/run/t0631.check
+++ b/tests/run/t0631.check
diff --git a/tests/pending/run/t0631.scala b/tests/run/t0631.scala
index 2767b4bf0..2767b4bf0 100644
--- a/tests/pending/run/t0631.scala
+++ b/tests/run/t0631.scala
diff --git a/tests/pending/run/t1333.check b/tests/run/t1333.check
index 6303af7f1..6303af7f1 100644
--- a/tests/pending/run/t1333.check
+++ b/tests/run/t1333.check
diff --git a/tests/pending/run/t1333.scala b/tests/run/t1333.scala
index 1696629cb..1696629cb 100644
--- a/tests/pending/run/t1333.scala
+++ b/tests/run/t1333.scala
diff --git a/tests/pending/run/t1697.scala b/tests/run/t1697.scala
index 39dcdd732..39dcdd732 100644
--- a/tests/pending/run/t1697.scala
+++ b/tests/run/t1697.scala
diff --git a/tests/pending/run/t1909b.scala b/tests/run/t1909b.scala
index b4bb9a1e0..b4bb9a1e0 100644
--- a/tests/pending/run/t1909b.scala
+++ b/tests/run/t1909b.scala
diff --git a/tests/pending/run/t2074_2.check b/tests/run/t2074_2.check
index 0876ef7d0..0876ef7d0 100644
--- a/tests/pending/run/t2074_2.check
+++ b/tests/run/t2074_2.check
diff --git a/tests/pending/run/t2074_2.scala b/tests/run/t2074_2.scala
index 4624170f8..4624170f8 100644
--- a/tests/pending/run/t2074_2.scala
+++ b/tests/run/t2074_2.scala
diff --git a/tests/pending/run/t2175.scala b/tests/run/t2175.scala
index 7885882d3..7885882d3 100644
--- a/tests/pending/run/t2175.scala
+++ b/tests/run/t2175.scala
diff --git a/tests/pending/run/t2316_run.scala b/tests/run/t2316_run.scala
index a2adad415..a2adad415 100644
--- a/tests/pending/run/t2316_run.scala
+++ b/tests/run/t2316_run.scala
diff --git a/tests/pending/run/t2417.check b/tests/run/t2417.check
index 36c954be2..36c954be2 100644
--- a/tests/pending/run/t2417.check
+++ b/tests/run/t2417.check
diff --git a/tests/pending/run/t2417.scala b/tests/run/t2417.scala
index 80105f72b..80105f72b 100644
--- a/tests/pending/run/t2417.scala
+++ b/tests/run/t2417.scala
diff --git a/tests/pending/run/t2544.check b/tests/run/t2544.check
index d19538dca..d19538dca 100644
--- a/tests/pending/run/t2544.check
+++ b/tests/run/t2544.check
diff --git a/tests/pending/run/t2544.scala b/tests/run/t2544.scala
index 6bee2f108..6bee2f108 100644
--- a/tests/pending/run/t2544.scala
+++ b/tests/run/t2544.scala
diff --git a/tests/pending/run/t2788.check b/tests/run/t2788.check
index 684f5f616..684f5f616 100644
--- a/tests/pending/run/t2788.check
+++ b/tests/run/t2788.check
diff --git a/tests/pending/run/t2788.scala b/tests/run/t2788.scala
index 61344029d..61344029d 100644
--- a/tests/pending/run/t2788.scala
+++ b/tests/run/t2788.scala
diff --git a/tests/pending/run/t3038d.flags b/tests/run/t3038d.flags
index ae0844605..ae0844605 100644
--- a/tests/pending/run/t3038d.flags
+++ b/tests/run/t3038d.flags
diff --git a/tests/pending/run/t3038d.scala b/tests/run/t3038d.scala
index 3dab07675..3dab07675 100644
--- a/tests/pending/run/t3038d.scala
+++ b/tests/run/t3038d.scala
diff --git a/tests/pending/run/t3580.scala b/tests/run/t3580.scala
index f91d5a24f..f91d5a24f 100644
--- a/tests/pending/run/t3580.scala
+++ b/tests/run/t3580.scala
diff --git a/tests/pending/run/t3613.scala b/tests/run/t3613.scala
index 1293f62c0..1293f62c0 100644
--- a/tests/pending/run/t3613.scala
+++ b/tests/run/t3613.scala
diff --git a/tests/pending/run/t3714.scala b/tests/run/t3714.scala
index 23a1e2e49..23a1e2e49 100644
--- a/tests/pending/run/t3714.scala
+++ b/tests/run/t3714.scala
diff --git a/tests/pending/run/t3832.scala b/tests/run/t3832.scala
index bc84dca22..bc84dca22 100644
--- a/tests/pending/run/t3832.scala
+++ b/tests/run/t3832.scala
diff --git a/tests/pending/run/t3984.scala b/tests/run/t3984.scala
index 15e50b10f..15e50b10f 100644
--- a/tests/pending/run/t3984.scala
+++ b/tests/run/t3984.scala
diff --git a/tests/pending/run/t4415.scala b/tests/run/t4415.scala
index 33d390869..33d390869 100644
--- a/tests/pending/run/t4415.scala
+++ b/tests/run/t4415.scala
diff --git a/tests/pending/run/t4482.check b/tests/run/t4482.check
index 0cfbf0888..0cfbf0888 100644
--- a/tests/pending/run/t4482.check
+++ b/tests/run/t4482.check
diff --git a/tests/pending/run/t4482.scala b/tests/run/t4482.scala
index 392861c22..392861c22 100644
--- a/tests/pending/run/t4482.scala
+++ b/tests/run/t4482.scala
diff --git a/tests/pending/run/t4753.check b/tests/run/t4753.check
index 7b19ee8df..7b19ee8df 100644
--- a/tests/pending/run/t4753.check
+++ b/tests/run/t4753.check
diff --git a/tests/pending/run/t4753.scala b/tests/run/t4753.scala
index cfb252cbe..cfb252cbe 100644
--- a/tests/pending/run/t4753.scala
+++ b/tests/run/t4753.scala
diff --git a/tests/pending/run/t4859.check b/tests/run/t4859.check
index d329744ca..d329744ca 100644
--- a/tests/pending/run/t4859.check
+++ b/tests/run/t4859.check
diff --git a/tests/pending/run/t4859.scala b/tests/run/t4859.scala
index 8b354ca94..8b354ca94 100644
--- a/tests/pending/run/t4859.scala
+++ b/tests/run/t4859.scala
diff --git a/tests/pending/run/t4871.check b/tests/run/t4871.check
index a60526a0f..a60526a0f 100644
--- a/tests/pending/run/t4871.check
+++ b/tests/run/t4871.check
diff --git a/tests/pending/run/t4871.scala b/tests/run/t4871.scala
index e25d5c138..e25d5c138 100644
--- a/tests/pending/run/t4871.scala
+++ b/tests/run/t4871.scala
diff --git a/tests/pending/run/t5158.check b/tests/run/t5158.check
index 573541ac9..573541ac9 100644
--- a/tests/pending/run/t5158.check
+++ b/tests/run/t5158.check
diff --git a/tests/pending/run/t5158.scala b/tests/run/t5158.scala
index 34c02c306..34c02c306 100644
--- a/tests/pending/run/t5158.scala
+++ b/tests/run/t5158.scala
diff --git a/tests/pending/run/t5293-map.scala b/tests/run/t5293-map.scala
index 1ef7d97e5..1ef7d97e5 100644
--- a/tests/pending/run/t5293-map.scala
+++ b/tests/run/t5293-map.scala
diff --git a/tests/pending/run/t5293.scala b/tests/run/t5293.scala
index 8a99989c5..8a99989c5 100644
--- a/tests/pending/run/t5293.scala
+++ b/tests/run/t5293.scala
diff --git a/tests/pending/run/t5407.check b/tests/run/t5407.check
index 51993f072..51993f072 100644
--- a/tests/pending/run/t5407.check
+++ b/tests/run/t5407.check
diff --git a/tests/pending/run/t5407.scala b/tests/run/t5407.scala
index cc761e5c0..cc761e5c0 100644
--- a/tests/pending/run/t5407.scala
+++ b/tests/run/t5407.scala
diff --git a/tests/pending/run/t6070.check b/tests/run/t6070.check
index 00750edc0..00750edc0 100644
--- a/tests/pending/run/t6070.check
+++ b/tests/run/t6070.check
diff --git a/tests/pending/run/t6070.scala b/tests/run/t6070.scala
index 828386d13..828386d13 100644
--- a/tests/pending/run/t6070.scala
+++ b/tests/run/t6070.scala
diff --git a/tests/pending/run/t6198.scala b/tests/run/t6198.scala
index d893b9568..d893b9568 100644
--- a/tests/pending/run/t6198.scala
+++ b/tests/run/t6198.scala
diff --git a/tests/pending/run/t6206.check b/tests/run/t6206.check
index 806457366..806457366 100644
--- a/tests/pending/run/t6206.check
+++ b/tests/run/t6206.check
diff --git a/tests/pending/run/t6206.scala b/tests/run/t6206.scala
index 668ade7f5..668ade7f5 100644
--- a/tests/pending/run/t6206.scala
+++ b/tests/run/t6206.scala
diff --git a/tests/pending/run/t6253a.scala b/tests/run/t6253a.scala
index c2db1f5af..c2db1f5af 100644
--- a/tests/pending/run/t6253a.scala
+++ b/tests/run/t6253a.scala
diff --git a/tests/pending/run/t6253b.scala b/tests/run/t6253b.scala
index c049aea7f..c049aea7f 100644
--- a/tests/pending/run/t6253b.scala
+++ b/tests/run/t6253b.scala
diff --git a/tests/pending/run/t6253c.scala b/tests/run/t6253c.scala
index 39c3a5b17..39c3a5b17 100644
--- a/tests/pending/run/t6253c.scala
+++ b/tests/run/t6253c.scala
diff --git a/tests/pending/run/t6337a.scala b/tests/run/t6337a.scala
index 0a78cd0b8..0a78cd0b8 100644
--- a/tests/pending/run/t6337a.scala
+++ b/tests/run/t6337a.scala
diff --git a/tests/pending/run/t6385.scala b/tests/run/t6385.scala
index f86fe8c14..f86fe8c14 100644
--- a/tests/pending/run/t6385.scala
+++ b/tests/run/t6385.scala
diff --git a/tests/pending/run/t6628.check b/tests/run/t6628.check
index bb101b641..bb101b641 100644
--- a/tests/pending/run/t6628.check
+++ b/tests/run/t6628.check
diff --git a/tests/pending/run/t6628.scala b/tests/run/t6628.scala
index bc87c1250..bc87c1250 100644
--- a/tests/pending/run/t6628.scala
+++ b/tests/run/t6628.scala
diff --git a/tests/pending/run/t6793.scala b/tests/run/t6793.scala
index 3d8492c10..3d8492c10 100644
--- a/tests/pending/run/t6793.scala
+++ b/tests/run/t6793.scala
diff --git a/tests/pending/run/t7200.scala b/tests/run/t7200.scala
index 8f33d016f..8f33d016f 100644
--- a/tests/pending/run/t7200.scala
+++ b/tests/run/t7200.scala
diff --git a/tests/pending/run/t7214.scala b/tests/run/t7214.scala
index d73fe6dd5..d73fe6dd5 100644
--- a/tests/pending/run/t7214.scala
+++ b/tests/run/t7214.scala
diff --git a/tests/pending/run/t7571.scala b/tests/run/t7571.scala
index fd4babee3..fd4babee3 100644
--- a/tests/pending/run/t7571.scala
+++ b/tests/run/t7571.scala
diff --git a/tests/pending/run/t8177f.scala b/tests/run/t8177f.scala
index 6f9a68c11..6f9a68c11 100644
--- a/tests/pending/run/t8177f.scala
+++ b/tests/run/t8177f.scala
diff --git a/tests/pending/run/t8197.scala b/tests/run/t8197.scala
index b510f96f1..b510f96f1 100644
--- a/tests/pending/run/t8197.scala
+++ b/tests/run/t8197.scala
diff --git a/tests/pending/run/try-catch-unify.check b/tests/run/try-catch-unify.check
index 67a8c64a3..67a8c64a3 100644
--- a/tests/pending/run/try-catch-unify.check
+++ b/tests/run/try-catch-unify.check
diff --git a/tests/pending/run/try-catch-unify.scala b/tests/run/try-catch-unify.scala
index 151e549e5..151e549e5 100644
--- a/tests/pending/run/try-catch-unify.scala
+++ b/tests/run/try-catch-unify.scala
diff --git a/tests/pending/run/unapplyArray.scala b/tests/run/unapplyArray.scala
index a29ef124b..a29ef124b 100644
--- a/tests/pending/run/unapplyArray.scala
+++ b/tests/run/unapplyArray.scala
diff --git a/tests/run/value-class-extractor.scala b/tests/run/value-class-extractor.scala
index 5628fea47..07f32e0e5 100644
--- a/tests/run/value-class-extractor.scala
+++ b/tests/run/value-class-extractor.scala
@@ -6,7 +6,7 @@ object NonNullChar {
@inline final val None = new NonNullChar(0.toChar)
}
-final class SomeProduct /*extends Product3[String, Int, List[String]]*/ {
+final class SomeProduct extends Product3[String, Int, List[String]] {
def canEqual(x: Any) = x.isInstanceOf[SomeProduct]
def _1 = "abc"
def _2 = 5
diff --git a/tests/pending/run/verify-ctor.check b/tests/run/verify-ctor.check
index 8baef1b4a..8baef1b4a 100644
--- a/tests/pending/run/verify-ctor.check
+++ b/tests/run/verify-ctor.check
diff --git a/tests/pending/run/verify-ctor.scala b/tests/run/verify-ctor.scala
index 528d038a8..528d038a8 100644
--- a/tests/pending/run/verify-ctor.scala
+++ b/tests/run/verify-ctor.scala
diff --git a/tests/pending/run/virtpatmat_try.check b/tests/run/virtpatmat_try.check
index 80ebbf494..80ebbf494 100644
--- a/tests/pending/run/virtpatmat_try.check
+++ b/tests/run/virtpatmat_try.check
diff --git a/tests/pending/run/virtpatmat_try.flags b/tests/run/virtpatmat_try.flags
index 3f5a3100e..3f5a3100e 100644
--- a/tests/pending/run/virtpatmat_try.flags
+++ b/tests/run/virtpatmat_try.flags
diff --git a/tests/pending/run/virtpatmat_try.scala b/tests/run/virtpatmat_try.scala
index 2cd05b799..2cd05b799 100644
--- a/tests/pending/run/virtpatmat_try.scala
+++ b/tests/run/virtpatmat_try.scala