Skip to content

Commit 7b224c5

Browse files
committed
Merge pull request scala#4521 from retronym/ticket/9326
SI-9326 Fix regression with existentials in parent types
2 parents ba81cf0 + bd42db9 commit 7b224c5

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

src/compiler/scala/tools/nsc/typechecker/Contexts.scala

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -952,11 +952,18 @@ trait Contexts { self: Analyzer =>
952952
private def importedAccessibleSymbol(imp: ImportInfo, name: Name, requireExplicit: Boolean): Symbol =
953953
imp.importedSymbol(name, requireExplicit) filter (s => isAccessible(s, imp.qual.tpe, superAccess = false))
954954

955+
private def requiresQualifier(s: Symbol) = (
956+
s.owner.isClass
957+
&& !s.owner.isPackageClass
958+
&& !s.isTypeParameterOrSkolem
959+
&& !s.isExistentiallyBound
960+
)
961+
955962
/** Must `sym` defined in package object of package `pkg`, if
956963
* it selected from a prefix with `pkg` as its type symbol?
957964
*/
958965
def isInPackageObject(sym: Symbol, pkg: Symbol): Boolean =
959-
pkg.isPackage && sym.owner != pkg
966+
pkg.isPackage && sym.owner != pkg && requiresQualifier(sym)
960967

961968
def isNameInScope(name: Name) = lookupSymbol(name, _ => true).isSuccess
962969

@@ -992,11 +999,6 @@ trait Contexts { self: Analyzer =>
992999
|| unit.exists && s.sourceFile != unit.source.file
9931000
)
9941001
)
995-
def requiresQualifier(s: Symbol) = (
996-
s.owner.isClass
997-
&& !s.owner.isPackageClass
998-
&& !s.isTypeParameterOrSkolem
999-
)
10001002
def lookupInPrefix(name: Name) = pre member name filter qualifies
10011003
def accessibleInPrefix(s: Symbol) = isAccessible(s, pre, superAccess = false)
10021004

test/files/pos/t9326a.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package p
2+
3+
trait M[A]
4+
5+
class C extends M[Tuple1[X] forSome { type X }]
6+

0 commit comments

Comments
 (0)