summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-03-17 16:17:04 -0700
committerJason Zaugg <jzaugg@gmail.com>2015-03-17 16:17:04 -0700
commit79c053738b8907e461e5087f63d247a64271509a (patch)
tree5f29c54b7b61e05346ad28c77e01e0d0b96ab07e /src
parentfa33395a25c87115c910e8d4a4124aee6134062b (diff)
downloadscala-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.scala2
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 _ =>