diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-11-26 13:05:26 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-12-06 12:40:46 +0100 |
commit | 9036f774bc834acd5b71484d2fa3882896ffd3ce (patch) | |
tree | 5b17c62f10b55efce6b5d29b5a11e70c2a0db54e /src/manual | |
parent | 7c1d1149291e1b83c96a0f6954144b9e97c030ea (diff) | |
download | scala-9036f774bc834acd5b71484d2fa3882896ffd3ce.tar.gz scala-9036f774bc834acd5b71484d2fa3882896ffd3ce.tar.bz2 scala-9036f774bc834acd5b71484d2fa3882896ffd3ce.zip |
SI-8010 Fix regression in erasure double definition checks
Calls to `Symbol#info` during scope iteration considered harmful.
Looks like calling `info` during this Scope iteration is triggering
the ExplicitOuter info transformer, which "makes all super accessors
and modules in traits non-private, mangling their names.". This name
change necessitates a rehashing of the owning scope, which I suspect
is enough to corrupt the ScopeEntry-s being traversed in
`checkNoDeclaredDoubleDefs`.
The upshot was that we encountered the same symbol twice, which was
reported as being a double-definition.
This problem only showed up after 086702d8a74, which did nothing
worse then change the order in which `{e, e1}.sym.info` were
forced.
I inspected SymbolPairs/OverridingPairs which *appear* to be immune
as they only test flags during scope iteration; infos are not used
until later, at which point we're iterating a temporary scope that
isn't part of the type of the owner of the symbols.
Diffstat (limited to 'src/manual')
0 files changed, 0 insertions, 0 deletions