Skip to content

Commit 3f08b09

Browse files
committed
Merge pull request scala#4099 from retronym/ticket/7596
SI-7596 Curtail overloaded symbols during unpickling
2 parents 57f36ba + 652abba commit 3f08b09

File tree

7 files changed

+66
-1
lines changed

7 files changed

+66
-1
lines changed

src/reflect/scala/reflect/internal/pickling/UnPickler.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ abstract class UnPickler {
396396
case NOtpe => NoType
397397
case NOPREFIXtpe => NoPrefix
398398
case THIStpe => ThisType(readSymbolRef())
399-
case SINGLEtpe => SingleType(readTypeRef(), readSymbolRef())
399+
case SINGLEtpe => SingleType(readTypeRef(), readSymbolRef().filter(_.isStable)) // SI-7596 account for overloading
400400
case SUPERtpe => SuperType(readTypeRef(), readTypeRef())
401401
case CONSTANTtpe => ConstantType(readConstantRef())
402402
case TYPEREFtpe => TypeRef(readTypeRef(), readSymbolRef(), readTypes())

test/files/pos/t7596/A_1.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
trait Driver {
2+
abstract class Table
3+
}
4+
5+
object Config {
6+
val driver : Driver = ???
7+
def driver(a: Any) = ???
8+
}
9+
10+
object Sites extends Config.driver.Table

test/files/pos/t7596/B_2.scala

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
object Test {
2+
locally {
3+
Sites: Config.driver.Table
4+
}
5+
}
6+
7+
// Under separate compilation, the pickler is foiled by the
8+
// overloaded term `Config.driver`, and results in:
9+
10+
// qbin/scalac test/files/pos/t7596/A_1.scala && qbin/scalac -explaintypes test/files/pos/t7596/B_2.scala
11+
// test/files/pos/t7596/B_2.scala:3: error: type mismatch;
12+
// found : Sites.type
13+
// required: Config.driver.Table
14+
// Sites: Config.driver.Table
15+
// ^
16+
// Sites.type <: Config.driver.Table?
17+
// Driver.this.type = Config.driver.type?
18+
// false
19+
// false

test/files/pos/t7596b/A.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
trait H2Driver{
2+
abstract class Table[T]
3+
}
4+
5+
object Config {
6+
val driver : H2Driver = ???
7+
def driver(app: Any): H2Driver = ???
8+
}
9+
10+
class Sites extends Config.driver.Table[String]

test/files/pos/t7596b/B.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class DAOBase[E]{
2+
type TableType <: Config.driver.Table[E]
3+
}
4+
class SitesDAO extends DAOBase[String]{
5+
type TableType = Sites
6+
}

test/files/pos/t7596c/A_1.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
trait Driver {
2+
abstract class Table
3+
}
4+
5+
object Config {
6+
val driver : Driver = ???
7+
val driverUniqueName: driver.type = driver
8+
def driver(a: Any) = ???
9+
}
10+
11+
object Sites extends Config.driver.Table

test/files/pos/t7596c/B_2.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
object Test {
2+
locally {
3+
Sites: Config.driver.Table
4+
}
5+
}
6+
7+
// This variation worked by avoiding referring to the
8+
// overloaded term `Config.driver` in the parent type of
9+
// Sites

0 commit comments

Comments
 (0)