diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2015-03-17 16:17:04 -0700 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2015-03-17 16:17:04 -0700 |
commit | 79c053738b8907e461e5087f63d247a64271509a (patch) | |
tree | 5f29c54b7b61e05346ad28c77e01e0d0b96ab07e /src | |
parent | fa33395a25c87115c910e8d4a4124aee6134062b (diff) | |
download | scala-79c053738b8907e461e5087f63d247a64271509a.tar.gz scala-79c053738b8907e461e5087f63d247a64271509a.tar.bz2 scala-79c053738b8907e461e5087f63d247a64271509a.zip |
SI-9223 By-name constructor params should not be aliased
Usually, the compiler tries avoids creating a field in a subclass
for a constructor parameter that is known to be stored in a field
in one of its superclasses.
However, in the enclosed test `run/t9223.scala`, this mechanism
confuses `=> A` with `A`, which results in a runtime
`ClassCastException`.
This commit avoids using param aliases for by-name parameters.
I have also added a test for something close the opposite case, where
the subclass has a strict parameter and the superclass has a by-name
parameter. This was working correctly before this patch.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 3a85d16f55..758425aad5 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -2053,7 +2053,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper case acc => acc } ownAcc match { - case acc: TermSymbol if !acc.isVariable => + case acc: TermSymbol if !acc.isVariable && !isByNameParamType(acc.info) => debuglog(s"$acc has alias ${alias.fullLocationString}") acc setAlias alias case _ => |