diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2017-04-04 19:17:42 +0200 |
---|---|---|
committer | Guillaume Martres <smarter@ubuntu.com> | 2017-04-04 20:24:35 +0200 |
commit | 6ae376a4544cbf93b94dc0a6ba4a78224e0477df (patch) | |
tree | 444b619989a686f66b74a963d238c318ff847aa2 /tests/neg | |
parent | 42c2a6fbbddf73ef2faeb6204c2b7521a76d7345 (diff) | |
download | dotty-6ae376a4544cbf93b94dc0a6ba4a78224e0477df.tar.gz dotty-6ae376a4544cbf93b94dc0a6ba4a78224e0477df.tar.bz2 dotty-6ae376a4544cbf93b94dc0a6ba4a78224e0477df.zip |
checkNoPrivateLeaks: Do not allow types to refer to leaky aliases
`checkNoPrivateLeaks` can force a lot of things, this lead to
hard-to-reproduce issues in unpickling because we called
`checkNoPrivateLeaks` on the type parameters of a class before anything
in the class was indexed. We fix this by making sure that
`checkNoPrivateLeaks` never transforms type symbols, only term symbols,
therefore we can unpickle type parameters without forcing too many
things. tests/neg/leak-type.scala illustrates the new restriction that
this necessitates.
Diffstat (limited to 'tests/neg')
-rw-r--r-- | tests/neg/leak-type.scala | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/neg/leak-type.scala b/tests/neg/leak-type.scala new file mode 100644 index 000000000..30ecab70b --- /dev/null +++ b/tests/neg/leak-type.scala @@ -0,0 +1,13 @@ +trait A { + private type Foo = Int + + + class Inner[T <: Foo] { // error: non-private type T refers to private type Foo in its type signature + def get: T = ??? + } +} +class B extends A { + def foo(x: Inner[_]): Unit = { + val a = x.get // error: cannot resolve reference to type B(B.this).Foo + } +} |