diff options
author | Vlad Ureche <vlad.ureche@gmail.com> | 2013-06-12 14:58:09 +0200 |
---|---|---|
committer | Vlad Ureche <vlad.ureche@gmail.com> | 2013-06-12 19:34:33 +0200 |
commit | c43b504ac1d843a580683a78eca0cb55bb427c15 (patch) | |
tree | 1f39bc2d0a760c6bee8fd92d6b95e6f2b97e51c8 /test/files/run/t5072.scala | |
parent | c0ba5eb196cc3c7174c9278dd4d050513e55b4ce (diff) | |
download | scala-c43b504ac1d843a580683a78eca0cb55bb427c15.tar.gz scala-c43b504ac1d843a580683a78eca0cb55bb427c15.tar.bz2 scala-c43b504ac1d843a580683a78eca0cb55bb427c15.zip |
SI-7343 Fixed phase ordering in specialization
Specialization rewires class parents during info transformation, and
the new info then guides the tree changes. But if a symbol is created
during duplication, which runs after specialization, its info is not
visited and thus the corresponding tree is not specialized.
One manifestation is the following:
```
object Test {
class Parent[@specialized(Int) T]
def spec_method[@specialized(Int) T](t: T, expectedXSuper: String) = {
class X extends Parent[T]()
// even in the specialized variant, the local X class
// doesn't extend Parent$mcI$sp, since its symbol has
// been created after specialization and was not seen
// by specialzation's info transformer.
...
}
}
```
We can fix this by forcing duplication to take place before specialization.
Review by @dragos, @paulp or @axel22.
Diffstat (limited to 'test/files/run/t5072.scala')
0 files changed, 0 insertions, 0 deletions