Skip to content

Commit 35c05ca

Browse files
authored
Merge pull request #9978 from dotty-staging/fix-#9967
Fix #9967: Don't add forwarders for super accessors
2 parents 4b00d36 + 6219b3f commit 35c05ca

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

compiler/src/dotty/tools/dotc/core/Flags.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,8 @@ object Flags {
517517
val AccessorOrDeferred: FlagSet = Accessor | Deferred
518518
val PrivateAccessor: FlagSet = Accessor | Private
519519
val AccessorOrSynthetic: FlagSet = Accessor | Synthetic
520+
val JavaOrPrivateOrSynthetic: FlagSet = Artifact | JavaDefined | Private | Synthetic
521+
val PrivateOrSynthetic: FlagSet = Artifact | Private | Synthetic
520522
val EnumCase: FlagSet = Case | Enum
521523
val CovariantLocal: FlagSet = Covariant | Local // A covariant type parameter
522524
val ContravariantLocal: FlagSet = Contravariant | Local // A contravariant type parameter
@@ -540,7 +542,6 @@ object Flags {
540542
val InlineByNameProxy: FlagSet = InlineProxy | Method
541543
val JavaEnumTrait: FlagSet = JavaDefined | Enum // A Java enum trait
542544
val JavaEnumValue: FlagSet = JavaDefined | EnumValue // A Java enum value
543-
val JavaOrPrivateOrSynthetic: FlagSet = JavaDefined | Private | Synthetic
544545
val StaticProtected: FlagSet = JavaDefined | JavaStatic | Protected // Java symbol which is `protected` and `static`
545546
val JavaModule: FlagSet = JavaDefined | Module // A Java companion object
546547
val JavaInterface: FlagSet = JavaDefined | NoInits | Trait
@@ -561,7 +562,6 @@ object Flags {
561562
val ValidForeverFlags: FlagSet = Package | Permanent | Scala2SpecialFlags
562563
val TermParamOrAccessor: FlagSet = Param | ParamAccessor
563564
val PrivateParamAccessor: FlagSet = ParamAccessor | Private
564-
val PrivateOrSynthetic: FlagSet = Private | Synthetic
565565
val PrivateOrArtifact: FlagSet = Private | Artifact
566566
val ClassTypeParam: FlagSet = Private | TypeParam
567567
val Scala2Trait: FlagSet = Scala2x | Trait

compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class ResolveSuper extends MiniPhase with IdentityDenotTransformer { thisPhase =
6060
override def transformDefDef(ddef: DefDef)(using Context): Tree = {
6161
val meth = ddef.symbol.asTerm
6262
if (meth.isSuperAccessor && !meth.is(Deferred)) {
63-
assert(ddef.rhs.isEmpty)
63+
assert(ddef.rhs.isEmpty, ddef.symbol)
6464
val cls = meth.owner.asClass
6565
val ops = new MixinOps(cls, thisPhase)
6666
import ops._

compiler/src/dotty/tools/dotc/typer/Namer.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,10 +1029,13 @@ class Namer { typer: Typer =>
10291029

10301030
def addWildcardForwarders(seen: List[TermName], span: Span): Unit =
10311031
for mbr <- path.tpe.membersBasedOnFlags(required = EmptyFlags, excluded = PrivateOrSynthetic) do
1032-
val alias = mbr.name.toTermName
1033-
if !seen.contains(alias)
1034-
&& mbr.matchesImportBound(if mbr.symbol.is(Given) then givenBound else wildcardBound)
1035-
then addForwarder(alias, mbr, span)
1032+
if !mbr.symbol.isSuperAccessor then
1033+
// Scala 2 superaccessors have neither Synthetic nor Artfact set, so we
1034+
// need to filter them out here (by contrast, Scala 3 superaccessors are Artifacts)
1035+
val alias = mbr.name.toTermName
1036+
if !seen.contains(alias)
1037+
&& mbr.matchesImportBound(if mbr.symbol.is(Given) then givenBound else wildcardBound)
1038+
then addForwarder(alias, mbr, span)
10361039

10371040
def addForwarders(sels: List[untpd.ImportSelector], seen: List[TermName]): Unit = sels match
10381041
case sel :: sels1 =>

tests/pos/i9967.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import collection.mutable
2+
3+
class MaxSizeMap[K, V](maxSize: Int)(using o: Ordering[K]):
4+
val sortedMap: mutable.TreeMap[K, V] = mutable.TreeMap.empty[K, V](o)
5+
6+
export sortedMap._

0 commit comments

Comments
 (0)