diff options
-rw-r--r-- | src/dotty/tools/dotc/core/Symbols.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/Types.scala | 14 | ||||
-rw-r--r-- | test/dotc/scala-collections.whitelist | 2 | ||||
-rw-r--r-- | tests/pos/overrideDataRace.scala | 13 |
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) = ??? + +} |