summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2012-07-04 23:26:03 -0700
committerAdriaan Moors <adriaan.moors@epfl.ch>2012-07-04 23:26:03 -0700
commitbb86fa21031d446c870887eabbc8b52b6416b25b (patch)
tree1121efd3cb5bc5cabc41bd43ec110068ef3d6e3b /test
parentb9371a739a6ac0399fece24ba202a2c9f40e3cc8 (diff)
parentac71812170547acdce74fc224bfa9f3a776b4cd1 (diff)
downloadscala-bb86fa21031d446c870887eabbc8b52b6416b25b.tar.gz
scala-bb86fa21031d446c870887eabbc8b52b6416b25b.tar.bz2
scala-bb86fa21031d446c870887eabbc8b52b6416b25b.zip
Merge pull request #777 from retronym/ticket/2796
SI-2796 Warn if early definitions are used with a trait.
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/t2796.check4
-rw-r--r--test/files/neg/t2796.flags1
-rw-r--r--test/files/neg/t2796.scala28
3 files changed, 33 insertions, 0 deletions
diff --git a/test/files/neg/t2796.check b/test/files/neg/t2796.check
new file mode 100644
index 0000000000..aeb18497ed
--- /dev/null
+++ b/test/files/neg/t2796.check
@@ -0,0 +1,4 @@
+t2796.scala:7: error: Implementation restriction: early definitions in traits are not initialized before the super class is initialized.
+ val abstractVal = "T1.abstractVal" // warn
+ ^
+one error found
diff --git a/test/files/neg/t2796.flags b/test/files/neg/t2796.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/t2796.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/t2796.scala b/test/files/neg/t2796.scala
new file mode 100644
index 0000000000..3bcc9df562
--- /dev/null
+++ b/test/files/neg/t2796.scala
@@ -0,0 +1,28 @@
+trait Base {
+ val abstractVal: String
+ final val useAbstractVal = abstractVal
+}
+
+trait T1 extends {
+ val abstractVal = "T1.abstractVal" // warn
+} with Base
+
+trait T2 extends {
+ type X = Int // okay
+} with Base
+
+
+class C1 extends {
+ val abstractVal = "C1.abstractVal" // okay
+} with Base
+
+object Test {
+ def main(args: Array[String]) {
+ assert(new C1 ().useAbstractVal == "C1.abstractVal")
+ // This currently fails. a more ambitious approach to this ticket would add $earlyinit$
+ // to traits and call it from the right places in the right order.
+ //
+ // For now, we'll just issue a warning.
+ assert(new T1 {}.useAbstractVal == "T1.abstractVal")
+ }
+}