aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/core/Symbols.scala2
-rw-r--r--src/dotty/tools/dotc/core/Types.scala14
-rw-r--r--test/dotc/scala-collections.whitelist2
-rw-r--r--tests/pos/overrideDataRace.scala13
4 files changed, 25 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/core/Symbols.scala b/src/dotty/tools/dotc/core/Symbols.scala
index e33f9651e..2a76f18d8 100644
--- a/src/dotty/tools/dotc/core/Symbols.scala
+++ b/src/dotty/tools/dotc/core/Symbols.scala
@@ -368,7 +368,7 @@ object Symbols {
type ThisName <: Name
- //assert(_id != 30214)
+ //assert(id != 4285)
/** The last denotation of this symbol */
private[this] var lastDenot: SymDenotation = _
diff --git a/src/dotty/tools/dotc/core/Types.scala b/src/dotty/tools/dotc/core/Types.scala
index 596d1ba24..710d45e24 100644
--- a/src/dotty/tools/dotc/core/Types.scala
+++ b/src/dotty/tools/dotc/core/Types.scala
@@ -1386,7 +1386,11 @@ object Types {
if (owner.isTerm) d else d.asSeenFrom(prefix)
}
- private def checkSymAssign(sym: Symbol)(implicit ctx: Context) =
+ private def checkSymAssign(sym: Symbol)(implicit ctx: Context) = {
+ def ownerSelfType = sym.owner.info match {
+ case info: ClassInfo => info.givenSelfType
+ case _ => NoType
+ }
assert(
(lastSymbol eq sym) ||
(lastSymbol eq null) || {
@@ -1398,9 +1402,11 @@ object Types {
(lastDefRunId == NoRunId)
} ||
(lastSymbol.infoOrCompleter == ErrorType ||
- sym.owner.derivesFrom(lastSymbol.owner) && sym.owner != lastSymbol.owner
- ),
- s"data race? overwriting symbol of ${this.show} / $this / ${this.getClass} / ${lastSymbol.id} / ${sym.id} / ${sym.owner} / ${lastSymbol.owner} / ${ctx.phase} at run ${ctx.runId}")
+ sym.owner != lastSymbol.owner &&
+ (sym.owner.derivesFrom(lastSymbol.owner) ||
+ ownerSelfType.derivesFrom(lastSymbol.owner))),
+ s"data race? overwriting symbol of ${this.show} / $this / ${this.getClass} / ${lastSymbol.id} / ${sym.id} / ${lastSymbol.owner} / ${sym.owner} / ${ctx.phase} at run ${ctx.runId}")
+ }
protected def sig: Signature = Signature.NotAMethod
diff --git a/test/dotc/scala-collections.whitelist b/test/dotc/scala-collections.whitelist
index 39db99c79..5c3c38e66 100644
--- a/test/dotc/scala-collections.whitelist
+++ b/test/dotc/scala-collections.whitelist
@@ -181,7 +181,7 @@
## those classes use early initialisers.
#./scala-scala/src/library/scala/collection/IterableViewLike.scala
#./scala-scala/src/library/scala/collection/SeqViewLike.scala
-#./scala-scala/src/library/scala/collection/TraversableViewLike.scala
+./scala-scala/src/library/scala/collection/TraversableViewLike.scala
#./scala-scala/src/library/scala/collection/immutable/StreamViewLike.scala
## This class causes a crash in backend.
diff --git a/tests/pos/overrideDataRace.scala b/tests/pos/overrideDataRace.scala
new file mode 100644
index 000000000..830ffd668
--- /dev/null
+++ b/tests/pos/overrideDataRace.scala
@@ -0,0 +1,13 @@
+package test
+
+trait Traversable {
+ def mkString: String = ???
+}
+
+trait ViewMkString {
+ self: Traversable =>
+
+ def mkString: String = mkString("")
+ def mkString(s: String) = ???
+
+}