diff options
author | Paul Phillips <paulp@improving.org> | 2013-01-06 12:25:03 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-01-07 05:43:23 -0800 |
commit | c58647f5f25e9d99cb1890a32af4621c4d4645fa (patch) | |
tree | 38b6a393b0121d1a1527514d3d45671732bf84de /test/files | |
parent | 766bb97114b5932b75340a9169558de61899997e (diff) | |
download | scala-c58647f5f25e9d99cb1890a32af4621c4d4645fa.tar.gz scala-c58647f5f25e9d99cb1890a32af4621c4d4645fa.tar.bz2 scala-c58647f5f25e9d99cb1890a32af4621c4d4645fa.zip |
SI-6928, VerifyError with self reference to super.
A bug in typers mishandled varargs. We should get more
aggressive about eliminating all the ad hoc parameter/argument
handling code spread everywhere. For varargs especially:
any code which tries to make an adjustment based on a
repeated parameter is more likely to be wrong than right.
In aggregate these reinventions are a huge source of bugs.
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/neg/t6928.check | 7 | ||||
-rw-r--r-- | test/files/neg/t6928.scala | 10 | ||||
-rw-r--r-- | test/files/run/t6928-run.check | 1 | ||||
-rw-r--r-- | test/files/run/t6928-run.scala | 10 |
4 files changed, 28 insertions, 0 deletions
diff --git a/test/files/neg/t6928.check b/test/files/neg/t6928.check new file mode 100644 index 0000000000..28b8e382dc --- /dev/null +++ b/test/files/neg/t6928.check @@ -0,0 +1,7 @@ +t6928.scala:2: error: super constructor cannot be passed a self reference unless parameter is declared by-name +object B extends A(B) + ^ +t6928.scala:3: error: super constructor cannot be passed a self reference unless parameter is declared by-name +object C extends A(null, null, C) + ^ +two errors found diff --git a/test/files/neg/t6928.scala b/test/files/neg/t6928.scala new file mode 100644 index 0000000000..84bdcde45a --- /dev/null +++ b/test/files/neg/t6928.scala @@ -0,0 +1,10 @@ +abstract class A( val someAs: A* ) +object B extends A(B) +object C extends A(null, null, C) + +object Test { + def main(args: Array[String]): Unit = { + println(B.someAs) + println(C.someAs) + } +} diff --git a/test/files/run/t6928-run.check b/test/files/run/t6928-run.check new file mode 100644 index 0000000000..a640c3e5fd --- /dev/null +++ b/test/files/run/t6928-run.check @@ -0,0 +1 @@ +3 As diff --git a/test/files/run/t6928-run.scala b/test/files/run/t6928-run.scala new file mode 100644 index 0000000000..87a8884d60 --- /dev/null +++ b/test/files/run/t6928-run.scala @@ -0,0 +1,10 @@ +abstract class A( val someAs: A* ) { + override def toString = someAs.length + " As" +} +object B extends A(null, null, null) + +object Test { + def main(args: Array[String]): Unit = { + println(B) + } +} |