summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-09-24 16:49:15 +0200
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2012-10-03 13:44:16 +0200
commitea9e4ec55ebb5dd6aaf22862622add7608e3f7a0 (patch)
treeeca1373dff02f6b835f62cdee3028e3de60c8d09
parentef934492df93e0fd3d78e7a3d4f9cccaf765d4d5 (diff)
downloadscala-ea9e4ec55ebb5dd6aaf22862622add7608e3f7a0.tar.gz
scala-ea9e4ec55ebb5dd6aaf22862622add7608e3f7a0.tar.bz2
scala-ea9e4ec55ebb5dd6aaf22862622add7608e3f7a0.zip
Fixed problem in SI-6408
Fixed problem reported in comment, where inner classes of value classe caused a compiler crash.
-rw-r--r--src/compiler/scala/tools/nsc/transform/Constructors.scala3
-rw-r--r--test/files/run/t6408.scala11
2 files changed, 13 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Constructors.scala b/src/compiler/scala/tools/nsc/transform/Constructors.scala
index 23b15a9033..4b9585bb93 100644
--- a/src/compiler/scala/tools/nsc/transform/Constructors.scala
+++ b/src/compiler/scala/tools/nsc/transform/Constructors.scala
@@ -127,7 +127,8 @@ abstract class Constructors extends Transform with ast.TreeDSL {
import CODE._
val result = mkAssign(to, Ident(from))
- if (from.name != nme.OUTER) result
+ if (from.name != nme.OUTER ||
+ from.tpe.typeSymbol.isPrimitiveValueClass) result
else localTyper.typedPos(to.pos) {
IF (from OBJ_EQ NULL) THEN Throw(NullPointerExceptionClass.tpe) ELSE result
}
diff --git a/test/files/run/t6408.scala b/test/files/run/t6408.scala
new file mode 100644
index 0000000000..ff17480b35
--- /dev/null
+++ b/test/files/run/t6408.scala
@@ -0,0 +1,11 @@
+class X(val i: Int) extends AnyVal {
+ class Inner(val q: Int) {
+ def plus = i + q
+ }
+}
+
+object Test extends App {
+ val x = new X(11)
+ val i = new x.Inner(22)
+ assert(i.plus == 33)
+}