summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/files/continuations-run/t5472.check12
-rw-r--r--test/files/neg/anyval-anyref-parent.check4
-rw-r--r--test/files/neg/checksensible.check17
-rw-r--r--test/files/neg/classmanifests_new_deprecations.check4
-rw-r--r--test/files/neg/divergent-implicit.check4
-rw-r--r--test/files/neg/for-comprehension-old.check8
-rw-r--r--test/files/neg/forgot-interpolator.check31
-rw-r--r--test/files/neg/forgot-interpolator.scala82
-rw-r--r--test/files/neg/found-req-variance.check20
-rw-r--r--test/files/neg/lazyvals.check4
-rw-r--r--test/files/neg/macro-bundle-abstract.check4
-rw-r--r--test/files/neg/macro-bundle-abstract.scala12
-rw-r--r--test/files/neg/macro-bundle-class.check4
-rw-r--r--test/files/neg/macro-bundle-class.scala11
-rw-r--r--test/files/neg/macro-bundle-nonmacro.check4
-rw-r--r--test/files/neg/macro-bundle-nonmacro.scala9
-rw-r--r--test/files/neg/macro-bundle-object.check7
-rw-r--r--test/files/neg/macro-bundle-object.scala12
-rw-r--r--test/files/neg/macro-bundle-polymorphic.check10
-rw-r--r--test/files/neg/macro-bundle-polymorphic.scala13
-rw-r--r--test/files/neg/macro-bundle-trait.check4
-rw-r--r--test/files/neg/macro-bundle-trait.scala12
-rw-r--r--test/files/neg/macro-quasiquotes.check2
-rw-r--r--test/files/neg/multi-array.check2
-rw-r--r--test/files/neg/names-defaults-neg.check2
-rw-r--r--test/files/neg/nested-annotation.check2
-rw-r--r--test/files/neg/newpat_unreachable.check8
-rw-r--r--test/files/neg/no-implicit-to-anyref.check2
-rw-r--r--test/files/neg/no-predef.check2
-rw-r--r--test/files/neg/package-ob-case.check5
-rw-r--r--test/files/neg/parser-errors.check16
-rw-r--r--test/files/neg/parser-errors.scala5
-rw-r--r--test/files/neg/parser-import-errors.check28
-rw-r--r--test/files/neg/parser-import-errors.scala49
-rw-r--r--test/files/neg/pat_unreachable.check5
-rw-r--r--test/files/neg/primitive-sigs-1.check2
-rw-r--r--test/files/neg/protected-constructors.check4
-rw-r--r--test/files/neg/saito.check2
-rw-r--r--test/files/neg/sensitive.check2
-rw-r--r--test/files/neg/stringinterpolation_macro-neg.check2
-rw-r--r--test/files/neg/t0209.check2
-rw-r--r--test/files/neg/t1038.check2
-rw-r--r--test/files/neg/t1623.check2
-rw-r--r--test/files/neg/t1705.check2
-rw-r--r--test/files/neg/t2462b.check5
-rw-r--r--test/files/neg/t2462b.flags1
-rw-r--r--test/files/neg/t2462b.scala3
-rw-r--r--test/files/neg/t2462c.check7
-rw-r--r--test/files/neg/t2462c.flags1
-rw-r--r--test/files/neg/t2462c.scala25
-rw-r--r--test/files/neg/t2775.check2
-rw-r--r--test/files/neg/t3453.check8
-rw-r--r--test/files/neg/t3692-new.check2
-rw-r--r--test/files/neg/t3971.check21
-rw-r--r--test/files/neg/t3971.scala12
-rw-r--r--test/files/neg/t3977.check2
-rw-r--r--test/files/neg/t4163.check7
-rw-r--r--test/files/neg/t4417.check2
-rw-r--r--test/files/neg/t4727.check2
-rw-r--r--test/files/neg/t4851.check12
-rw-r--r--test/files/neg/t4987.check2
-rw-r--r--test/files/neg/t5120.check4
-rw-r--r--test/files/neg/t5426.check8
-rw-r--r--test/files/neg/t5663-badwarneq.check5
-rw-r--r--test/files/neg/t5666.check24
-rw-r--r--test/files/neg/t5761.check2
-rw-r--r--test/files/neg/t5803.check2
-rw-r--r--test/files/neg/t6048.check5
-rw-r--r--test/files/neg/t6074.check2
-rw-r--r--test/files/neg/t6120.check20
-rw-r--r--test/files/neg/t6120.flags1
-rw-r--r--test/files/neg/t6120.scala7
-rw-r--r--test/files/neg/t6601.check2
-rw-r--r--test/files/neg/t6667b.check4
-rw-r--r--test/files/neg/t7385.check9
-rw-r--r--test/files/neg/t7473.check8
-rw-r--r--test/files/neg/t7473.scala4
-rw-r--r--test/files/neg/t7629-view-bounds-deprecation.check11
-rw-r--r--test/files/neg/t7629-view-bounds-deprecation.flags1
-rw-r--r--test/files/neg/t7629-view-bounds-deprecation.scala4
-rw-r--r--test/files/neg/t771.check2
-rw-r--r--test/files/neg/t7721.check8
-rw-r--r--test/files/neg/t7756b.check5
-rw-r--r--test/files/neg/t7848-interp-warn.check12
-rw-r--r--test/files/neg/t7848-interp-warn.flags1
-rw-r--r--test/files/neg/t7848-interp-warn.scala18
-rw-r--r--test/files/neg/t7859.check19
-rw-r--r--test/files/neg/t7859/A_1.scala5
-rw-r--r--test/files/neg/t7859/B_2.scala9
-rw-r--r--test/files/neg/t7870.check4
-rw-r--r--test/files/neg/t7870.scala3
-rw-r--r--test/files/neg/t7877.check7
-rw-r--r--test/files/neg/t7877.scala13
-rw-r--r--test/files/neg/unreachablechar.check5
-rw-r--r--test/files/neg/valueclasses.check43
-rw-r--r--test/files/neg/valueclasses.scala13
-rw-r--r--test/files/neg/warn-unused-privates.check5
-rw-r--r--test/files/pos/t7815.scala30
-rw-r--r--test/files/pos/t7854.scala5
-rw-r--r--test/files/pos/t7864.flags1
-rw-r--r--test/files/pos/t7864.scala5
-rw-r--r--test/files/run/existential-rangepos.check6
-rw-r--r--test/files/run/future-flatmap-exec-count.check6
-rw-r--r--test/files/run/future-flatmap-exec-count.scala61
-rw-r--r--test/files/run/macro-bundle-repl.check24
-rw-r--r--test/files/run/macro-bundle-repl.scala13
-rw-r--r--test/files/run/macro-bundle-static.check6
-rw-r--r--test/files/run/macro-bundle-static/Impls_Macros_1.scala31
-rw-r--r--test/files/run/macro-bundle-static/Test_2.scala8
-rw-r--r--test/files/run/macro-bundle-toplevel.check6
-rw-r--r--test/files/run/macro-bundle-toplevel.flags (renamed from test/files/run/macro-bundle.flags)0
-rw-r--r--test/files/run/macro-bundle-toplevel/Impls_Macros_1.scala (renamed from test/files/run/macro-bundle/Impls_Macros_1.scala)13
-rw-r--r--test/files/run/macro-bundle-toplevel/Test_2.scala (renamed from test/files/run/macro-bundle/Test_2.scala)3
-rw-r--r--test/files/run/macro-bundle.check3
-rw-r--r--test/files/run/macro-reflective-mamd-normal-mi.check3
-rw-r--r--test/files/run/position-val-def.check30
-rw-r--r--test/files/run/position-val-def.scala26
-rw-r--r--test/files/run/private-inline.check6
-rw-r--r--test/files/run/repl-power.check13
-rw-r--r--test/files/run/repl-power.scala2
-rw-r--r--test/files/run/showraw_mods.check2
-rw-r--r--test/files/run/t2106.check3
-rw-r--r--test/files/run/t4742.flags1
-rw-r--r--test/files/run/t4742.scala7
-rw-r--r--test/files/run/t5064.check8
-rw-r--r--test/files/run/t5385.check16
-rw-r--r--test/files/run/t5603.check26
-rw-r--r--test/files/run/t6288.check6
-rw-r--r--test/files/run/t6392b.check2
-rw-r--r--test/files/run/t6719.check1
-rw-r--r--test/files/run/t6719.scala8
-rw-r--r--test/files/run/t6768.check12
-rw-r--r--test/files/run/t6768.scala12
-rw-r--r--test/files/run/t7271.check2
-rw-r--r--test/files/run/t7331c.check2
-rw-r--r--test/files/run/t7398.scala6
-rw-r--r--test/files/run/t7825.scala34
-rw-r--r--test/files/run/t7852.check0
-rw-r--r--test/files/run/t7852.flags1
-rw-r--r--test/files/run/t7852.scala39
-rw-r--r--test/files/run/t7859/A_1.scala11
-rw-r--r--test/files/run/t7859/B_2.scala47
-rw-r--r--test/files/run/t7868.scala13
-rw-r--r--test/files/run/t7868b.check6
-rw-r--r--test/files/run/t7868b.scala11
-rw-r--r--test/files/run/t7871.check1
-rw-r--r--test/files/run/t7871/Macros_1.scala27
-rw-r--r--test/files/run/t7871/Test_2.scala6
-rw-r--r--test/files/run/t7876.scala26
-rw-r--r--test/files/scalacheck/quasiquotes/TermConstructionProps.scala24
-rw-r--r--test/files/scalacheck/quasiquotes/TermDeconstructionProps.scala20
-rw-r--r--test/pending/t7629-view-bounds-removal.check9
-rw-r--r--test/pending/t7629-view-bounds-removal.flags1
-rw-r--r--test/pending/t7629-view-bounds-removal.scala4
-rw-r--r--test/scaladoc/run/SI-4676.scala3
-rw-r--r--test/scaladoc/run/t7876.check1
-rw-r--r--test/scaladoc/run/t7876.scala19
-rw-r--r--test/scaladoc/run/t7876b.check3
-rw-r--r--test/scaladoc/run/t7876b.scala24
159 files changed, 1273 insertions, 317 deletions
diff --git a/test/files/continuations-run/t5472.check b/test/files/continuations-run/t5472.check
index 1af7767f6d..2468b6b27d 100644
--- a/test/files/continuations-run/t5472.check
+++ b/test/files/continuations-run/t5472.check
@@ -5,7 +5,17 @@ t5472.scala:12: warning: expression case4(){
case5()
} is cps-transformed unexpectedly
(location, accessors) <- new ContinuationizedParallelIterable(map)
- ^
+ ^
+t5472.scala:12: warning: expression case5(){
+ matchEnd3(false)
+} is cps-transformed unexpectedly
+ (location, accessors) <- new ContinuationizedParallelIterable(map)
+ ^
+t5472.scala:12: warning: expression matchEnd3(x: Boolean){
+ x
+} is cps-transformed unexpectedly
+ (location, accessors) <- new ContinuationizedParallelIterable(map)
+ ^
t5472.scala:12: warning: expression matchEnd3(x: Int){
x
} is cps-transformed unexpectedly
diff --git a/test/files/neg/anyval-anyref-parent.check b/test/files/neg/anyval-anyref-parent.check
index 8c2aa36583..8a00fb394d 100644
--- a/test/files/neg/anyval-anyref-parent.check
+++ b/test/files/neg/anyval-anyref-parent.check
@@ -4,9 +4,9 @@ trait Foo2 extends AnyVal // fail
anyval-anyref-parent.scala:5: error: Any does not have a constructor
class Bar1 extends Any // fail
^
-anyval-anyref-parent.scala:6: error: value class needs to have exactly one public val parameter
+anyval-anyref-parent.scala:6: error: value class parameter must be a val and not be private[this]
class Bar2(x: Int) extends AnyVal // fail
- ^
+ ^
anyval-anyref-parent.scala:10: error: illegal inheritance; superclass Any
is not a subclass of the superclass Object
of the mixin trait Immutable
diff --git a/test/files/neg/checksensible.check b/test/files/neg/checksensible.check
index e5f1a38d96..ef3aee5ee4 100644
--- a/test/files/neg/checksensible.check
+++ b/test/files/neg/checksensible.check
@@ -28,6 +28,9 @@ checksensible.scala:27: warning: comparing values of types Int and Unit using `=
checksensible.scala:29: warning: comparing values of types Int and String using `==' will always yield false
1 == "abc"
^
+checksensible.scala:29: warning: Int and String are unrelated: they will most likely never compare equal
+ 1 == "abc"
+ ^
checksensible.scala:33: warning: comparing values of types Some[Int] and Int using `==' will always yield false
Some(1) == 1 // as above
^
@@ -61,12 +64,18 @@ checksensible.scala:51: warning: comparing values of types Int and Unit using `!
checksensible.scala:52: warning: comparing values of types Int and Symbol using `!=' will always yield true
(1 != 'sym)
^
+checksensible.scala:52: warning: Int and Symbol are unrelated: they will most likely always compare unequal
+ (1 != 'sym)
+ ^
checksensible.scala:58: warning: comparing a fresh object using `==' will always yield false
((x: Int) => x + 1) == null
^
checksensible.scala:59: warning: comparing a fresh object using `==' will always yield false
Bep == ((_: Int) + 1)
^
+checksensible.scala:59: warning: Bep.type and Int => Int are unrelated: they will most likely never compare equal
+ Bep == ((_: Int) + 1)
+ ^
checksensible.scala:61: warning: comparing a fresh object using `==' will always yield false
new Object == new Object
^
@@ -82,6 +91,9 @@ checksensible.scala:66: warning: comparing values of types Int and Null using `=
checksensible.scala:71: warning: comparing values of types Bip and Bop using `==' will always yield false
(x1 == x2)
^
+checksensible.scala:71: warning: Bip and Bop are unrelated: they will most likely never compare equal
+ (x1 == x2)
+ ^
checksensible.scala:81: warning: comparing values of types EqEqRefTest.this.C3 and EqEqRefTest.this.Z1 using `==' will always yield false
c3 == z1
^
@@ -94,9 +106,12 @@ checksensible.scala:83: warning: comparing values of types EqEqRefTest.this.Z1 a
checksensible.scala:84: warning: comparing values of types EqEqRefTest.this.C3 and String using `!=' will always yield true
c3 != "abc"
^
+checksensible.scala:84: warning: EqEqRefTest.this.C3 and String are unrelated: they will most likely always compare unequal
+ c3 != "abc"
+ ^
checksensible.scala:95: warning: comparing values of types Unit and Int using `!=' will always yield true
while ((c = in.read) != -1)
^
error: No warnings can be incurred under -Xfatal-warnings.
-33 warnings found
+38 warnings found
one error found
diff --git a/test/files/neg/classmanifests_new_deprecations.check b/test/files/neg/classmanifests_new_deprecations.check
index 39b6bf216c..fd1e2728c3 100644
--- a/test/files/neg/classmanifests_new_deprecations.check
+++ b/test/files/neg/classmanifests_new_deprecations.check
@@ -1,6 +1,6 @@
classmanifests_new_deprecations.scala:2: warning: type ClassManifest in object Predef is deprecated: Use `scala.reflect.ClassTag` instead
def cm1[T: ClassManifest] = ???
- ^
+ ^
classmanifests_new_deprecations.scala:3: warning: type ClassManifest in object Predef is deprecated: Use `scala.reflect.ClassTag` instead
def cm2[T](implicit evidence$1: ClassManifest[T]) = ???
^
@@ -9,7 +9,7 @@ classmanifests_new_deprecations.scala:4: warning: type ClassManifest in object P
^
classmanifests_new_deprecations.scala:6: warning: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead
def rcm1[T: scala.reflect.ClassManifest] = ???
- ^
+ ^
classmanifests_new_deprecations.scala:7: warning: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead
def rcm2[T](implicit evidence$1: scala.reflect.ClassManifest[T]) = ???
^
diff --git a/test/files/neg/divergent-implicit.check b/test/files/neg/divergent-implicit.check
index b5c607cf59..5f20df1b91 100644
--- a/test/files/neg/divergent-implicit.check
+++ b/test/files/neg/divergent-implicit.check
@@ -10,9 +10,9 @@ starting with method cast in object Test1
divergent-implicit.scala:14: error: diverging implicit expansion for type Test2.Baz => Test2.Bar
starting with method baz2bar in object Test2
val x: Bar = new Foo
- ^
+ ^
divergent-implicit.scala:15: error: diverging implicit expansion for type Test2.Foo => Test2.Bar
starting with method foo2bar in object Test2
val y: Bar = new Baz
- ^
+ ^
four errors found
diff --git a/test/files/neg/for-comprehension-old.check b/test/files/neg/for-comprehension-old.check
index fc04beca53..1ecaf12af4 100644
--- a/test/files/neg/for-comprehension-old.check
+++ b/test/files/neg/for-comprehension-old.check
@@ -1,15 +1,15 @@
for-comprehension-old.scala:3: warning: val keyword in for comprehension is deprecated
for (x <- 1 to 5 ; val y = x) yield x+y // fail
- ^
+ ^
for-comprehension-old.scala:5: warning: val keyword in for comprehension is deprecated
for (val x <- 1 to 5 ; val y = x) yield x+y // fail
- ^
+ ^
for-comprehension-old.scala:8: warning: val keyword in for comprehension is deprecated
for (z <- 1 to 2 ; x <- 1 to 5 ; val y = x) yield x+y // fail
- ^
+ ^
for-comprehension-old.scala:10: warning: val keyword in for comprehension is deprecated
for (z <- 1 to 2 ; val x <- 1 to 5 ; val y = x) yield x+y // fail
- ^
+ ^
for-comprehension-old.scala:4: error: val in for comprehension must be followed by assignment
for (val x <- 1 to 5 ; y = x) yield x+y // fail
^
diff --git a/test/files/neg/forgot-interpolator.check b/test/files/neg/forgot-interpolator.check
index f6de4d7b3a..157cbb4802 100644
--- a/test/files/neg/forgot-interpolator.check
+++ b/test/files/neg/forgot-interpolator.check
@@ -1,9 +1,30 @@
-forgot-interpolator.scala:4: warning: looks like an interpolated String; did you forget the interpolator?
- def f = "Put the $bippy in the $bippy!" // warn
+forgot-interpolator.scala:4: warning: `$bippy` looks like an interpolated identifier! Did you forget the interpolator?
+ def f = "Put the $bippy in the $bippy!" // warn 1
^
-forgot-interpolator.scala:14: warning: looks like an interpolated String; did you forget the interpolator?
- def f = """Put the ${println("bippy")} in the bippy!""" // warn
+forgot-interpolator.scala:14: warning: That looks like an interpolated expression! Did you forget the interpolator?
+ def f = """Put the ${println("bippy")} in the bippy!""" // warn 2
^
+forgot-interpolator.scala:30: warning: `$beppo` looks like an interpolated identifier! Did you forget the interpolator?
+ def f = "$beppo was a marx bros who saw dollars." // warn 3
+ ^
+forgot-interpolator.scala:34: warning: `$aleppo` looks like an interpolated identifier! Did you forget the interpolator?
+ def f = "$aleppo is a pepper and a city." // warn 4
+ ^
+forgot-interpolator.scala:42: warning: `$bar` looks like an interpolated identifier! Did you forget the interpolator?
+ def f = "$bar is private, shall we warn just in case?" // warn 5
+ ^
+forgot-interpolator.scala:47: warning: `$hippo` looks like an interpolated identifier! Did you forget the interpolator?
+ def h = "$hippo takes an implicit" // warn 6
+ ^
+forgot-interpolator.scala:88: warning: `$groucho` looks like an interpolated identifier! Did you forget the interpolator?
+ def f2 = "I salute $groucho" // warn 7
+ ^
+forgot-interpolator.scala:89: warning: `$dingo` looks like an interpolated identifier! Did you forget the interpolator?
+ def f3 = "I even salute $dingo" // warn 8
+ ^
+forgot-interpolator.scala:90: warning: `$calico` looks like an interpolated identifier! Did you forget the interpolator?
+ def f4 = "I also salute $calico" // warn 9
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-two warnings found
+9 warnings found
one error found
diff --git a/test/files/neg/forgot-interpolator.scala b/test/files/neg/forgot-interpolator.scala
index d67db82643..34a7c7aef4 100644
--- a/test/files/neg/forgot-interpolator.scala
+++ b/test/files/neg/forgot-interpolator.scala
@@ -1,7 +1,7 @@
class A {
val bippy = 123
- def f = "Put the $bippy in the $bippy!" // warn
+ def f = "Put the $bippy in the $bippy!" // warn 1
}
class B {
@@ -11,5 +11,83 @@ class B {
}
class C {
- def f = """Put the ${println("bippy")} in the bippy!""" // warn
+ def f = """Put the ${println("bippy")} in the bippy!""" // warn 2
+}
+
+package object test {
+ def aleppo = 9
+ def greppo(n: Int) = ???
+ def zappos(n: Int)(implicit ord: math.Ordering[Int]) = ???
+ def hippo(implicit n: Int) = ???
+}
+
+package test {
+ // not sure if overloading is kosher in pkg obj yet
+ class Doo {
+ def beppo(i: Int) = 8 * i
+ def beppo = 8
+ class Dah extends Doo {
+ def f = "$beppo was a marx bros who saw dollars." // warn 3
+ }
+ }
+ class E {
+ def f = "$aleppo is a pepper and a city." // warn 4
+ def k = s"Just an interpolation of $aleppo" // no warn
+ }
+ class Bar {
+ private def bar = 8
+ if (bar > 8) ??? // use it to avoid extra warning
+ }
+ class Baz extends Bar {
+ def f = "$bar is private, shall we warn just in case?" // warn 5
+ }
+ class G {
+ def g = "$greppo takes an arg" // no warn
+ def z = "$zappos takes an arg too" // no warn
+ def h = "$hippo takes an implicit" // warn 6
+ }
+ class J {
+ def j = 8
+ class J2 {
+ def j(i: Int) = 2 * i
+ def jj = "shadowed $j" // no warn
+ }
+ }
+ import annotation._
+ @implicitNotFound("No Z in ${A}") // no warn
+ class Z[A]
+}
+
+
+package inf1 {
+ import scala.annotation.implicitNotFound
+
+ @implicitNotFound(msg = "Cannot construct a collection of type ${To} with elements of type ${Elem} based on a collection of type ${From}.") // no warn
+ trait CannotBuildFrom[-From, -Elem, +To]
+}
+
+package inf2 {
+ @scala.annotation.implicitNotFound(msg = "Cannot construct a collection of type ${To} with elements of type ${Elem} based on a collection of type ${From}.") // no warn
+ trait CannotBuildFrom[-From, -Elem, +To]
+}
+
+package inf3 {
+ @scala.annotation.implicitNotFound("Cannot construct a collection of type ${To} with elements of type ${Elem} based on a collection of type ${From}.") // no warn
+ trait CannotBuildFrom[-From, -Elem, +To]
+}
+
+package curry {
+ class A {
+ def bunko()(x: Int): Int = 5
+ def groucho(): Int = 5
+ def dingo()()()()()(): Int = 5 // kind of nuts this can be evaluated with just 'dingo', but okay
+ def calico[T1, T2]()()(): Int = 5 // even nutsier
+ def palomino[T1, T2]()(y: Int = 5)(): Int = 5 // even nutsier
+
+ def f1 = "I was picked up by the $bunko squad" // no warn
+ def f2 = "I salute $groucho" // warn 7
+ def f3 = "I even salute $dingo" // warn 8
+ def f4 = "I also salute $calico" // warn 9
+ def f5 = "I draw the line at $palomino" // no warn
+ }
}
diff --git a/test/files/neg/found-req-variance.check b/test/files/neg/found-req-variance.check
index 55a01012a9..cc26458ac5 100644
--- a/test/files/neg/found-req-variance.check
+++ b/test/files/neg/found-req-variance.check
@@ -4,56 +4,56 @@ found-req-variance.scala:22: error: type mismatch;
Note: B <: A, but class Inv is invariant in type T.
You may wish to define T as +T instead. (SLS 4.5)
def f2 = Set[Inv[A]]() + new Inv[B]
- ^
+ ^
found-req-variance.scala:23: error: type mismatch;
found : Inv[C]
required: Inv[A]
Note: C <: A, but class Inv is invariant in type T.
You may wish to define T as +T instead. (SLS 4.5)
def f3 = Set[Inv[A]]() + new Inv[C]
- ^
+ ^
found-req-variance.scala:24: error: type mismatch;
found : Inv[A]
required: Inv[B]
Note: A >: B, but class Inv is invariant in type T.
You may wish to define T as -T instead. (SLS 4.5)
def f4 = Set[Inv[B]]() + new Inv[A]
- ^
+ ^
found-req-variance.scala:26: error: type mismatch;
found : Inv[C]
required: Inv[B]
Note: C <: B, but class Inv is invariant in type T.
You may wish to define T as +T instead. (SLS 4.5)
def f6 = Set[Inv[B]]() + new Inv[C]
- ^
+ ^
found-req-variance.scala:27: error: type mismatch;
found : Inv[A]
required: Inv[C]
Note: A >: C, but class Inv is invariant in type T.
You may wish to define T as -T instead. (SLS 4.5)
def f7 = Set[Inv[C]]() + new Inv[A]
- ^
+ ^
found-req-variance.scala:28: error: type mismatch;
found : Inv[B]
required: Inv[C]
Note: B >: C, but class Inv is invariant in type T.
You may wish to define T as -T instead. (SLS 4.5)
def f8 = Set[Inv[C]]() + new Inv[B]
- ^
+ ^
found-req-variance.scala:34: error: type mismatch;
found : MultiInv[A]
required: Multi[A,B,C]
Note: A >: B (and MultiInv[A] <: Multi[A,A,C]), but class Multi is invariant in type Inv.
You may wish to define Inv as -Inv instead. (SLS 4.5)
def g4 = Set[Multi[A, B, C]]() + new MultiInv[A]
- ^
+ ^
found-req-variance.scala:36: error: type mismatch;
found : MultiInv[C]
required: Multi[A,B,C]
Note: C <: B (and MultiInv[C] <: Multi[A,C,C]), but class Multi is invariant in type Inv.
You may wish to define Inv as +Inv instead. (SLS 4.5)
def g6 = Set[Multi[A, B, C]]() + new MultiInv[C]
- ^
+ ^
found-req-variance.scala:47: error: type mismatch;
found : FF1[A,A]
required: FF1[B,B]
@@ -160,7 +160,7 @@ found-req-variance.scala:94: error: type mismatch;
Note: Int <: AnyVal (and Misc.MyData <: Misc.Data[Int]), but class Data is invariant in type A.
You may wish to define A as +A instead. (SLS 4.5)
def f1 = Set[Data[AnyVal]]() + new MyData
- ^
+ ^
found-req-variance.scala:100: error: type mismatch;
found : Set[String]
required: Set[CharSequence]
@@ -174,7 +174,7 @@ found-req-variance.scala:104: error: type mismatch;
Note: String <: Object, but class Trippy is invariant in type T2.
You may wish to define T2 as +T2 instead. (SLS 4.5)
def g1 = Set[Trippy[AnyRef, AnyRef, AnyRef]]() + new Trippy[String, String, String]
- ^
+ ^
found-req-variance.scala:105: error: type mismatch;
found : scala.collection.immutable.Map[AnyRef,String]
required: Map[String,String]
diff --git a/test/files/neg/lazyvals.check b/test/files/neg/lazyvals.check
index 1ae8b13d92..c4daf9d842 100644
--- a/test/files/neg/lazyvals.check
+++ b/test/files/neg/lazyvals.check
@@ -7,9 +7,9 @@ lazyvals.scala:9: error: lazy not allowed here. Only vals can be lazy
lazyvals.scala:12: error: lazy not allowed here. Only vals can be lazy
lazy def q: Double = 0.0
^
-lazyvals.scala:15: error: lazy values may not be abstract
+lazyvals.scala:15: error: '=' expected but ';' found.
lazy val t;
- ^
+ ^
lazyvals.scala:20: error: lazy not allowed here. Only vals can be lazy
lazy trait T {}
^
diff --git a/test/files/neg/macro-bundle-abstract.check b/test/files/neg/macro-bundle-abstract.check
new file mode 100644
index 0000000000..4b07adcc95
--- /dev/null
+++ b/test/files/neg/macro-bundle-abstract.check
@@ -0,0 +1,4 @@
+macro-bundle-abstract.scala:5: error: class Bundle$Bundle needs to be abstract, since method deferred in trait Bundle of type => Int is not defined
+trait Bundle extends Macro {
+ ^
+one error found
diff --git a/test/files/neg/macro-bundle-abstract.scala b/test/files/neg/macro-bundle-abstract.scala
new file mode 100644
index 0000000000..2b302045da
--- /dev/null
+++ b/test/files/neg/macro-bundle-abstract.scala
@@ -0,0 +1,12 @@
+import scala.language.experimental.macros
+import scala.reflect.macros.Macro
+import scala.reflect.macros.Context
+
+trait Bundle extends Macro {
+ def deferred: Int
+ def impl = ???
+}
+
+object Macros {
+ def foo = macro Bundle.impl
+} \ No newline at end of file
diff --git a/test/files/neg/macro-bundle-class.check b/test/files/neg/macro-bundle-class.check
new file mode 100644
index 0000000000..92695390ab
--- /dev/null
+++ b/test/files/neg/macro-bundle-class.check
@@ -0,0 +1,4 @@
+macro-bundle-class.scala:10: error: macro bundles must be monomorphic traits extending scala.reflect.macros.Macro and not implementing its `val c: Context` member
+ def foo = macro Bundle.impl
+ ^
+one error found
diff --git a/test/files/neg/macro-bundle-class.scala b/test/files/neg/macro-bundle-class.scala
new file mode 100644
index 0000000000..4b92cdd40f
--- /dev/null
+++ b/test/files/neg/macro-bundle-class.scala
@@ -0,0 +1,11 @@
+import scala.language.experimental.macros
+import scala.reflect.macros.Macro
+import scala.reflect.macros.Context
+
+class Bundle(val c: Context) extends Macro {
+ def impl = ???
+}
+
+object Macros {
+ def foo = macro Bundle.impl
+} \ No newline at end of file
diff --git a/test/files/neg/macro-bundle-nonmacro.check b/test/files/neg/macro-bundle-nonmacro.check
new file mode 100644
index 0000000000..5a265b5724
--- /dev/null
+++ b/test/files/neg/macro-bundle-nonmacro.check
@@ -0,0 +1,4 @@
+macro-bundle-nonmacro.scala:8: error: not found: value Bundle
+ def foo = Bundle.impl
+ ^
+one error found
diff --git a/test/files/neg/macro-bundle-nonmacro.scala b/test/files/neg/macro-bundle-nonmacro.scala
new file mode 100644
index 0000000000..c7d99f4582
--- /dev/null
+++ b/test/files/neg/macro-bundle-nonmacro.scala
@@ -0,0 +1,9 @@
+import scala.language.experimental.macros
+
+trait Bundle {
+ def impl = ???
+}
+
+object Macros {
+ def foo = Bundle.impl
+} \ No newline at end of file
diff --git a/test/files/neg/macro-bundle-object.check b/test/files/neg/macro-bundle-object.check
new file mode 100644
index 0000000000..e122001427
--- /dev/null
+++ b/test/files/neg/macro-bundle-object.check
@@ -0,0 +1,7 @@
+macro-bundle-object.scala:11: error: macro implementation has wrong shape:
+ required: (c: scala.reflect.macros.Context): c.Expr[Any]
+ found : : Nothing
+number of parameter sections differ
+ def foo = macro Bundle.impl
+ ^
+one error found
diff --git a/test/files/neg/macro-bundle-object.scala b/test/files/neg/macro-bundle-object.scala
new file mode 100644
index 0000000000..98c4238a62
--- /dev/null
+++ b/test/files/neg/macro-bundle-object.scala
@@ -0,0 +1,12 @@
+import scala.language.experimental.macros
+import scala.reflect.macros.Macro
+import scala.reflect.macros.Context
+
+object Bundle extends Macro {
+ val c: Context = ???
+ def impl = ???
+}
+
+object Macros {
+ def foo = macro Bundle.impl
+} \ No newline at end of file
diff --git a/test/files/neg/macro-bundle-polymorphic.check b/test/files/neg/macro-bundle-polymorphic.check
new file mode 100644
index 0000000000..204bd30bca
--- /dev/null
+++ b/test/files/neg/macro-bundle-polymorphic.check
@@ -0,0 +1,10 @@
+macro-bundle-polymorphic.scala:10: error: macro bundles must be monomorphic traits extending scala.reflect.macros.Macro and not implementing its `val c: Context` member
+ def foo = macro Bundle.impl
+ ^
+macro-bundle-polymorphic.scala:11: error: macro bundles must be monomorphic traits extending scala.reflect.macros.Macro and not implementing its `val c: Context` member
+ def foo = macro Bundle[Int].impl
+ ^
+macro-bundle-polymorphic.scala:12: error: macro bundles must be monomorphic traits extending scala.reflect.macros.Macro and not implementing its `val c: Context` member
+ def foo = macro Bundle[Int, Nothing].impl
+ ^
+three errors found
diff --git a/test/files/neg/macro-bundle-polymorphic.scala b/test/files/neg/macro-bundle-polymorphic.scala
new file mode 100644
index 0000000000..0468d841bd
--- /dev/null
+++ b/test/files/neg/macro-bundle-polymorphic.scala
@@ -0,0 +1,13 @@
+import scala.language.experimental.macros
+import scala.reflect.macros.Macro
+import scala.reflect.macros.Context
+
+trait Bundle[T] extends Macro {
+ def impl = ???
+}
+
+object Macros {
+ def foo = macro Bundle.impl
+ def foo = macro Bundle[Int].impl
+ def foo = macro Bundle[Int, Nothing].impl
+} \ No newline at end of file
diff --git a/test/files/neg/macro-bundle-trait.check b/test/files/neg/macro-bundle-trait.check
new file mode 100644
index 0000000000..972788c577
--- /dev/null
+++ b/test/files/neg/macro-bundle-trait.check
@@ -0,0 +1,4 @@
+macro-bundle-trait.scala:11: error: macro bundles must be monomorphic traits extending scala.reflect.macros.Macro and not implementing its `val c: Context` member
+ def foo = macro Bundle.impl
+ ^
+one error found
diff --git a/test/files/neg/macro-bundle-trait.scala b/test/files/neg/macro-bundle-trait.scala
new file mode 100644
index 0000000000..ddc87f6db3
--- /dev/null
+++ b/test/files/neg/macro-bundle-trait.scala
@@ -0,0 +1,12 @@
+import scala.language.experimental.macros
+import scala.reflect.macros.Macro
+import scala.reflect.macros.Context
+
+trait Bundle extends Macro {
+ val c: Context = ???
+ def impl = ???
+}
+
+object Macros {
+ def foo = macro Bundle.impl
+} \ No newline at end of file
diff --git a/test/files/neg/macro-quasiquotes.check b/test/files/neg/macro-quasiquotes.check
index a2d48723b5..96ef75dd32 100644
--- a/test/files/neg/macro-quasiquotes.check
+++ b/test/files/neg/macro-quasiquotes.check
@@ -1,6 +1,6 @@
Macros_1.scala:14: error: macro implementation has wrong shape:
required: (x: Impls.this.c.Expr[Int]): Impls.this.c.Expr[Any]
- found : (x: Impls.this.c.universe.Block): Impls.this.c.universe.Apply
+ found : (x: Impls.this.c.universe.Block): Impls.this.c.universe.Tree
type mismatch for parameter x: Impls.this.c.Expr[Int] does not conform to Impls.this.c.universe.Block
def m3(x: Int) = macro Impls.impl3
^
diff --git a/test/files/neg/multi-array.check b/test/files/neg/multi-array.check
index 6bdeb34c9e..511caa126f 100644
--- a/test/files/neg/multi-array.check
+++ b/test/files/neg/multi-array.check
@@ -1,4 +1,4 @@
multi-array.scala:7: error: too many arguments for constructor Array: (_length: Int)Array[T]
val a: Array[Int] = new Array(10, 10)
- ^
+ ^
one error found
diff --git a/test/files/neg/names-defaults-neg.check b/test/files/neg/names-defaults-neg.check
index 4966779cc3..cdc12c2490 100644
--- a/test/files/neg/names-defaults-neg.check
+++ b/test/files/neg/names-defaults-neg.check
@@ -97,7 +97,7 @@ names-defaults-neg.scala:82: error: type mismatch;
required: String
Error occurred in an application involving default arguments.
new A2[String]()
- ^
+ ^
names-defaults-neg.scala:86: error: module extending its companion class cannot use default constructor arguments
object C extends C()
^
diff --git a/test/files/neg/nested-annotation.check b/test/files/neg/nested-annotation.check
index c077d35a29..ca263943fe 100644
--- a/test/files/neg/nested-annotation.check
+++ b/test/files/neg/nested-annotation.check
@@ -5,6 +5,6 @@ class ComplexAnnotation(val value: Annotation) extends ClassfileAnnotation
^
nested-annotation.scala:8: error: nested classfile annotations must be defined in java; found: inline
@ComplexAnnotation(new inline) def bippy(): Int = 1
- ^
+ ^
one warning found
one error found
diff --git a/test/files/neg/newpat_unreachable.check b/test/files/neg/newpat_unreachable.check
index a928e3853a..4463e2f1a4 100644
--- a/test/files/neg/newpat_unreachable.check
+++ b/test/files/neg/newpat_unreachable.check
@@ -13,6 +13,9 @@ If you intended to match against value d in class A, you must use backticks, lik
newpat_unreachable.scala:9: warning: unreachable code due to variable pattern 'b' on line 6
case _ => println("matched neither")
^
+newpat_unreachable.scala:7: warning: unreachable code
+ case c => println("matched c")
+ ^
newpat_unreachable.scala:22: warning: patterns after a variable pattern cannot match (SLS 8.1.1)
If you intended to match against parameter b of method g, you must use backticks, like: case `b` =>
case b => 1
@@ -24,6 +27,9 @@ If you intended to match against parameter c of method h, you must use backticks
newpat_unreachable.scala:24: warning: unreachable code due to variable pattern 'b' on line 22
case _ => 3
^
+newpat_unreachable.scala:23: warning: unreachable code
+ case c => 2
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-7 warnings found
+9 warnings found
one error found
diff --git a/test/files/neg/no-implicit-to-anyref.check b/test/files/neg/no-implicit-to-anyref.check
index 5ab5fd12a1..fe417ad8b0 100644
--- a/test/files/neg/no-implicit-to-anyref.check
+++ b/test/files/neg/no-implicit-to-anyref.check
@@ -18,5 +18,5 @@ Note that AV extends Any, not AnyRef.
Such types can participate in value classes, but instances
cannot appear in singleton types or in reference comparisons.
new AV(0): AnyRef
- ^
+ ^
four errors found
diff --git a/test/files/neg/no-predef.check b/test/files/neg/no-predef.check
index fc538892ef..a63d8c5ba5 100644
--- a/test/files/neg/no-predef.check
+++ b/test/files/neg/no-predef.check
@@ -7,7 +7,7 @@ no-predef.scala:3: error: type mismatch;
found : java.lang.Long
required: scala.Long
def f2 = new java.lang.Long(5) : Long
- ^
+ ^
no-predef.scala:4: error: value map is not a member of String
def f3 = "abc" map (_ + 1)
^
diff --git a/test/files/neg/package-ob-case.check b/test/files/neg/package-ob-case.check
index 063a120db1..9b0ede1c6d 100644
--- a/test/files/neg/package-ob-case.check
+++ b/test/files/neg/package-ob-case.check
@@ -2,6 +2,9 @@ package-ob-case.scala:3: warning: it is not recommended to define classes/object
If possible, define class X in package foo instead.
case class X(z: Int) { }
^
+package-ob-case.scala:3: warning: class X should be placed directly in package foo instead of package object foo. Under some circumstances companion objects and case classes in package objects can fail to recompile. See https://issues.scala-lang.org/browse/SI-5954.
+ case class X(z: Int) { }
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-one warning found
+two warnings found
one error found
diff --git a/test/files/neg/parser-errors.check b/test/files/neg/parser-errors.check
deleted file mode 100644
index 0ab3331c0c..0000000000
--- a/test/files/neg/parser-errors.check
+++ /dev/null
@@ -1,16 +0,0 @@
-parser-errors.scala:1: error: lazy values may not be abstract
-abstract class A1 { lazy val foo: Int }
- ^
-parser-errors.scala:2: error: pattern definition may not be abstract
-abstract class A2 { val Some(x) }
- ^
-parser-errors.scala:3: error: an explicit type is required for default initialization
-abstract class A3 { var x = _ }
- ^
-parser-errors.scala:4: error: only vars are eligible for default initialization
-abstract class A4 { val x: Int = _ }
- ^
-parser-errors.scala:5: error: pattern definition is ineligible for default initialization
-abstract class A5 { var Some(x) = _ }
- ^
-5 errors found
diff --git a/test/files/neg/parser-errors.scala b/test/files/neg/parser-errors.scala
deleted file mode 100644
index 7b1a290629..0000000000
--- a/test/files/neg/parser-errors.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-abstract class A1 { lazy val foo: Int }
-abstract class A2 { val Some(x) }
-abstract class A3 { var x = _ }
-abstract class A4 { val x: Int = _ }
-abstract class A5 { var Some(x) = _ }
diff --git a/test/files/neg/parser-import-errors.check b/test/files/neg/parser-import-errors.check
deleted file mode 100644
index e211c275a6..0000000000
--- a/test/files/neg/parser-import-errors.check
+++ /dev/null
@@ -1,28 +0,0 @@
-parser-import-errors.scala:12: error: not found: type B1
- new B1
- ^
-parser-import-errors.scala:13: error: not found: type C1
- new C1
- ^
-parser-import-errors.scala:19: error: object X1 is not a member of package p1
- import p1.{ A1 => X1, X1 => A1 }
- ^
-parser-import-errors.scala:21: error: not found: type A1
- new A1
- ^
-parser-import-errors.scala:22: error: not found: type B1
- new B1
- ^
-parser-import-errors.scala:23: error: not found: type C1
- new C1
- ^
-parser-import-errors.scala:33: error: not found: type C1
- new C1
- ^
-parser-import-errors.scala:38: error: A1 appears twice as a target of a renaming
- import p1.{ A1, B1 => A1 }
- ^
-parser-import-errors.scala:45: error: object Z1 is not a member of package p1
- import p1.{ Z1, B1 => Z1 }
- ^
-9 errors found
diff --git a/test/files/neg/parser-import-errors.scala b/test/files/neg/parser-import-errors.scala
deleted file mode 100644
index 010bb95a1e..0000000000
--- a/test/files/neg/parser-import-errors.scala
+++ /dev/null
@@ -1,49 +0,0 @@
-package p1 {
- class A1
- class B1
- class C1
-}
-
-package p2 {
- import p1.{ A1, B1 => Q1, C1 => _ }
-
- class X {
- new A1
- new B1
- new C1
- new Q1
- }
-}
-
-package p3 {
- import p1.{ A1 => X1, X1 => A1 }
- class X {
- new A1
- new B1
- new C1
- new X1
- }
-}
-
-package p4 {
- import p1.{ A1 => B1, B1 => A1 }
- class X {
- new A1
- new B1
- new C1
- }
-}
-
-package p5 {
- import p1.{ A1, B1 => A1 }
- class X {
- new A1
- }
-}
-
-package p6 {
- import p1.{ Z1, B1 => Z1 }
- class X {
- new Z1
- }
-}
diff --git a/test/files/neg/pat_unreachable.check b/test/files/neg/pat_unreachable.check
index b4c0e7e104..374ee4e9cf 100644
--- a/test/files/neg/pat_unreachable.check
+++ b/test/files/neg/pat_unreachable.check
@@ -9,6 +9,9 @@ If you intended to match against parameter c of method contrivedExample, you mus
pat_unreachable.scala:24: warning: unreachable code due to variable pattern 'b' on line 22
case _ => println("matched neither")
^
+pat_unreachable.scala:23: warning: unreachable code
+ case c => println("matched c")
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-three warnings found
+four warnings found
one error found
diff --git a/test/files/neg/primitive-sigs-1.check b/test/files/neg/primitive-sigs-1.check
index d0619fa1d3..77dc457a49 100644
--- a/test/files/neg/primitive-sigs-1.check
+++ b/test/files/neg/primitive-sigs-1.check
@@ -2,5 +2,5 @@ B.scala:3: error: type mismatch;
found : Bippy
required: AC[Integer]
J.f(new Bippy())
- ^
+ ^
one error found
diff --git a/test/files/neg/protected-constructors.check b/test/files/neg/protected-constructors.check
index b636d076e4..f44d7db9b9 100644
--- a/test/files/neg/protected-constructors.check
+++ b/test/files/neg/protected-constructors.check
@@ -1,12 +1,12 @@
protected-constructors.scala:17: error: too many arguments for constructor Foo1: ()dingus.Foo1
val foo1 = new Foo1("abc")
- ^
+ ^
protected-constructors.scala:18: error: constructor Foo2 in class Foo2 cannot be accessed in object P
Access to protected constructor Foo2 not permitted because
enclosing object P in package hungus is not a subclass of
class Foo2 in package dingus where target is defined
val foo2 = new Foo2("abc")
- ^
+ ^
protected-constructors.scala:19: error: class Foo3 in object Ding cannot be accessed in object dingus.Ding
Access to protected class Foo3 not permitted because
enclosing object P in package hungus is not a subclass of
diff --git a/test/files/neg/saito.check b/test/files/neg/saito.check
index f78b300b4c..061a45b76e 100644
--- a/test/files/neg/saito.check
+++ b/test/files/neg/saito.check
@@ -1,4 +1,4 @@
saito.scala:10: error: class A cannot be instantiated because it does not conform to its self-type A with B
val a: A = new A; // should not be allowed
- ^
+ ^
one error found
diff --git a/test/files/neg/sensitive.check b/test/files/neg/sensitive.check
index 9270e639c3..32d988ec97 100644
--- a/test/files/neg/sensitive.check
+++ b/test/files/neg/sensitive.check
@@ -1,4 +1,4 @@
sensitive.scala:17: error: constructor Sensitive in class Sensitive cannot be accessed in object Attacker
val y = new Sensitive()
- ^
+ ^
one error found
diff --git a/test/files/neg/stringinterpolation_macro-neg.check b/test/files/neg/stringinterpolation_macro-neg.check
index fa4f2c9472..457f497f2f 100644
--- a/test/files/neg/stringinterpolation_macro-neg.check
+++ b/test/files/neg/stringinterpolation_macro-neg.check
@@ -1,6 +1,6 @@
stringinterpolation_macro-neg.scala:8: error: too few parts
new StringContext().f()
- ^
+ ^
stringinterpolation_macro-neg.scala:9: error: too few arguments for interpolated string
new StringContext("", " is ", "%2d years old").f(s)
^
diff --git a/test/files/neg/t0209.check b/test/files/neg/t0209.check
index 4ba5fef4e9..1904e58e7a 100644
--- a/test/files/neg/t0209.check
+++ b/test/files/neg/t0209.check
@@ -2,5 +2,5 @@ t0209.scala:15: error: type mismatch;
found : C
required: _1.type where val _1: A
(new B: A).f(new C)
- ^
+ ^
one error found
diff --git a/test/files/neg/t1038.check b/test/files/neg/t1038.check
index c74d8b338f..b191b89ad1 100644
--- a/test/files/neg/t1038.check
+++ b/test/files/neg/t1038.check
@@ -1,5 +1,5 @@
t1038.scala:4: error: not enough arguments for constructor X: (x: Int)X.
Unspecified value parameter x.
val a = new X
- ^
+ ^
one error found
diff --git a/test/files/neg/t1623.check b/test/files/neg/t1623.check
index e30db5cddd..251039ad30 100644
--- a/test/files/neg/t1623.check
+++ b/test/files/neg/t1623.check
@@ -1,4 +1,4 @@
t1623.scala:11: error: class BImpl cannot be instantiated because it does not conform to its self-type test.BImpl with test.A
val b = new BImpl
- ^
+ ^
one error found
diff --git a/test/files/neg/t1705.check b/test/files/neg/t1705.check
index 12f5c27de6..7f75bd0fb5 100644
--- a/test/files/neg/t1705.check
+++ b/test/files/neg/t1705.check
@@ -1,6 +1,6 @@
t1705.scala:9: error: can't existentially abstract over parameterized type this.T[Z]
val c = new C{
- ^
+ ^
t1705.scala:14: error: can't existentially abstract over parameterized type C[String]
val x1 = {
^
diff --git a/test/files/neg/t2462b.check b/test/files/neg/t2462b.check
index bc0d9aa469..b3b8007a93 100644
--- a/test/files/neg/t2462b.check
+++ b/test/files/neg/t2462b.check
@@ -6,9 +6,6 @@ t2462b.scala:9: warning: Invalid implicitNotFound message for trait Meh2 in pack
The type parameter Elem referenced in the message of the @implicitNotFound annotation is not defined by trait Meh2.
trait Meh2[-From, +To]
^
-t2462b.scala:12: error: overriding method x in class thankyoupartest of type => Int;
- method x needs `override' modifier
-class testmustfail extends thankyoupartest { def x = 43 }
- ^
+error: No warnings can be incurred under -Xfatal-warnings.
two warnings found
one error found
diff --git a/test/files/neg/t2462b.flags b/test/files/neg/t2462b.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/neg/t2462b.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/neg/t2462b.scala b/test/files/neg/t2462b.scala
index 7a1389cc8e..576db4bd3f 100644
--- a/test/files/neg/t2462b.scala
+++ b/test/files/neg/t2462b.scala
@@ -7,6 +7,3 @@ trait Meh[-From, +To]
@implicitNotFound(msg = "Cannot construct a collection of type ${To} ${Elem}.")
trait Meh2[-From, +To]
-
-class thankyoupartest { def x = 42 }
-class testmustfail extends thankyoupartest { def x = 43 }
diff --git a/test/files/neg/t2462c.check b/test/files/neg/t2462c.check
new file mode 100644
index 0000000000..edeead55d6
--- /dev/null
+++ b/test/files/neg/t2462c.check
@@ -0,0 +1,7 @@
+t2462c.scala:18: error: No C of X$Y
+ f[X$Y]
+ ^
+t2462c.scala:24: error: No C of Foo[Int]
+ f[Foo[Int]]
+ ^
+two errors found
diff --git a/test/files/neg/t2462c.flags b/test/files/neg/t2462c.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/neg/t2462c.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/neg/t2462c.scala b/test/files/neg/t2462c.scala
new file mode 100644
index 0000000000..acf04afba9
--- /dev/null
+++ b/test/files/neg/t2462c.scala
@@ -0,0 +1,25 @@
+
+import annotation._
+
+@implicitNotFound("No C of ${ A }")
+class C[A]
+
+trait X$Y
+/* using the $$ separator for expanded names is unwise
+trait X$$Y
+trait X$$$Y
+trait X$$$$Y
+ */
+
+trait Foo[A]
+
+class Test {
+ def f[A: C] = ???
+ f[X$Y]
+/* using the $$ separator for expanded names is unwise
+ f[X$$Y]
+ f[X$$$Y]
+ f[X$$$$Y]
+ */
+ f[Foo[Int]]
+}
diff --git a/test/files/neg/t2775.check b/test/files/neg/t2775.check
index 2c901665d6..934a970f2e 100644
--- a/test/files/neg/t2775.check
+++ b/test/files/neg/t2775.check
@@ -1,4 +1,4 @@
t2775.scala:1: error: cannot find class tag for element type B.this.T
trait B[S] { type T = S; val c = new Array[T](1) }
- ^
+ ^
one error found
diff --git a/test/files/neg/t3453.check b/test/files/neg/t3453.check
index 2472e8b212..52c948128c 100644
--- a/test/files/neg/t3453.check
+++ b/test/files/neg/t3453.check
@@ -2,20 +2,20 @@ t3453.scala:18: error: type mismatch;
found : A
required: B
new A
- ^
+ ^
t3453.scala:36: error: type mismatch;
found : A
required: B
new A
- ^
+ ^
t3453.scala:50: error: type mismatch;
found : A
required: B
new A
- ^
+ ^
t3453.scala:64: error: type mismatch;
found : A
required: B
new A
- ^
+ ^
four errors found
diff --git a/test/files/neg/t3692-new.check b/test/files/neg/t3692-new.check
index 358eaed41e..9b96449930 100644
--- a/test/files/neg/t3692-new.check
+++ b/test/files/neg/t3692-new.check
@@ -9,7 +9,7 @@ t3692-new.scala:16: warning: non-variable type argument Int in type pattern Map[
^
t3692-new.scala:15: warning: unreachable code
case m1: Map[Int, V] => new java.util.HashMap[Integer, V]
- ^
+ ^
t3692-new.scala:4: warning: Tester has a main method with parameter type Array[String], but Tester will not be a runnable program.
Reason: main method must have exact signature (Array[String])Unit
object Tester {
diff --git a/test/files/neg/t3971.check b/test/files/neg/t3971.check
new file mode 100644
index 0000000000..8685119876
--- /dev/null
+++ b/test/files/neg/t3971.check
@@ -0,0 +1,21 @@
+t3971.scala:6: error: type mismatch;
+ found : Int
+ required: String
+ f(g("abc")("def")) // g returns Int, needs String
+ ^
+t3971.scala:7: error: type mismatch;
+ found : Int(5)
+ required: String
+ f(5)
+ ^
+t3971.scala:8: error: type mismatch;
+ found : Int
+ required: String
+ f(h("abc"))
+ ^
+t3971.scala:11: error: type mismatch;
+ found : Boolean
+ required: String
+ ({"ab".reverse; "ba".equals})(0): String
+ ^
+four errors found
diff --git a/test/files/neg/t3971.scala b/test/files/neg/t3971.scala
new file mode 100644
index 0000000000..35f64fde0c
--- /dev/null
+++ b/test/files/neg/t3971.scala
@@ -0,0 +1,12 @@
+class A {
+ def f(x: String) = x
+ def g(x: String)(y: String): Int = x.length + y.length
+ def h(x: String) = x.length
+
+ f(g("abc")("def")) // g returns Int, needs String
+ f(5)
+ f(h("abc"))
+
+ // a perverse piece of code from a perverse coder
+ ({"ab".reverse; "ba".equals})(0): String
+}
diff --git a/test/files/neg/t3977.check b/test/files/neg/t3977.check
index 4242059463..72335a0926 100644
--- a/test/files/neg/t3977.check
+++ b/test/files/neg/t3977.check
@@ -1,4 +1,4 @@
t3977.scala:12: error: could not find implicit value for parameter w: False#If[E]
new NoNull
- ^
+ ^
one error found
diff --git a/test/files/neg/t4163.check b/test/files/neg/t4163.check
index a09a522e3a..47bc78d31c 100644
--- a/test/files/neg/t4163.check
+++ b/test/files/neg/t4163.check
@@ -1,4 +1,7 @@
-t4163.scala:4: error: for comprehension must start with generator: '<-' expected but '=' found.
+t4163.scala:4: error: '<-' expected but '=' found.
x = 3
^
-one error found
+t4163.scala:5: error: illegal start of simple expression
+ y <- 0 to 100
+^
+two errors found
diff --git a/test/files/neg/t4417.check b/test/files/neg/t4417.check
index dfc9feca24..dbd0f1df46 100644
--- a/test/files/neg/t4417.check
+++ b/test/files/neg/t4417.check
@@ -3,5 +3,5 @@ t4417.scala:11: error: constructor Pixel$mcD$sp in class Pixel$mcD$sp cannot be
enclosing object Pixel is not a subclass of
class Pixel$mcD$sp where target is defined
def apply(v: Double): Pixel1d = new Pixel1d(v)
- ^
+ ^
one error found
diff --git a/test/files/neg/t4727.check b/test/files/neg/t4727.check
index 55d4d01b97..a17cdde044 100644
--- a/test/files/neg/t4727.check
+++ b/test/files/neg/t4727.check
@@ -1,5 +1,5 @@
t4727.scala:5: error: an expression of type Null is ineligible for implicit conversion
Error occurred in an application involving default arguments.
new C[Int]
- ^
+ ^
one error found
diff --git a/test/files/neg/t4851.check b/test/files/neg/t4851.check
index 6d0f424e82..4f2919807e 100644
--- a/test/files/neg/t4851.check
+++ b/test/files/neg/t4851.check
@@ -3,19 +3,19 @@ S.scala:2: warning: Adapting argument list by inserting (): leaky (Object-receiv
given arguments: <none>
after adaptation: new J((): Unit)
val x1 = new J
- ^
+ ^
S.scala:3: warning: Adapting argument list by inserting (): leaky (Object-receiving) target makes this especially dangerous.
signature: J(x: Any): J
given arguments: <none>
after adaptation: new J((): Unit)
val x2 = new J()
- ^
+ ^
S.scala:4: warning: Adapting argument list by creating a 5-tuple: this may not be what you want.
signature: J(x: Any): J
given arguments: 1, 2, 3, 4, 5
after adaptation: new J((1, 2, 3, 4, 5): (Int, Int, Int, Int, Int))
val x3 = new J(1, 2, 3, 4, 5)
- ^
+ ^
S.scala:6: warning: Adapting argument list by creating a 3-tuple: this may not be what you want.
signature: Some.apply[A](x: A): Some[A]
given arguments: 1, 2, 3
@@ -27,19 +27,19 @@ S.scala:7: warning: Adapting argument list by creating a 3-tuple: this may not b
given arguments: 1, 2, 3
after adaptation: new Some((1, 2, 3): (Int, Int, Int))
val y2 = new Some(1, 2, 3)
- ^
+ ^
S.scala:9: warning: Adapting argument list by inserting (): this is unlikely to be what you want.
signature: J2[T](x: T): J2[T]
given arguments: <none>
after adaptation: new J2((): Unit)
val z1 = new J2
- ^
+ ^
S.scala:10: warning: Adapting argument list by inserting (): this is unlikely to be what you want.
signature: J2[T](x: T): J2[T]
given arguments: <none>
after adaptation: new J2((): Unit)
val z2 = new J2()
- ^
+ ^
S.scala:14: warning: Adapting argument list by creating a 3-tuple: this may not be what you want.
signature: Test.anyId(a: Any): Any
given arguments: 1, 2, 3
diff --git a/test/files/neg/t4987.check b/test/files/neg/t4987.check
index ee058f0ac1..8d7344d27b 100644
--- a/test/files/neg/t4987.check
+++ b/test/files/neg/t4987.check
@@ -1,4 +1,4 @@
t4987.scala:2: error: constructor Foo2 in class Foo2 cannot be accessed in object Bar2
object Bar2 { new Foo2(0, 0) }
- ^
+ ^
one error found
diff --git a/test/files/neg/t5120.check b/test/files/neg/t5120.check
index fc65ca16a5..34d4ebde31 100644
--- a/test/files/neg/t5120.check
+++ b/test/files/neg/t5120.check
@@ -2,11 +2,11 @@ t5120.scala:11: error: type mismatch;
found : Object
required: _1
List(str, other) foreach (_.x1 = new AnyRef)
- ^
+ ^
t5120.scala:25: error: type mismatch;
found : Thread
required: h.T
(which expands to) _2
List(str, num).foreach(h => h.f1 = new Thread())
- ^
+ ^
two errors found
diff --git a/test/files/neg/t5426.check b/test/files/neg/t5426.check
index 98f3ddaaae..c042cdcec3 100644
--- a/test/files/neg/t5426.check
+++ b/test/files/neg/t5426.check
@@ -4,12 +4,18 @@ t5426.scala:2: warning: comparing values of types Some[Int] and Int using `==' w
t5426.scala:3: warning: comparing values of types Int and Some[Int] using `==' will always yield false
def f2 = 5 == Some(5)
^
+t5426.scala:3: warning: Int and Some[Int] are unrelated: they will most likely never compare equal
+ def f2 = 5 == Some(5)
+ ^
t5426.scala:8: warning: comparing values of types Int and Some[Int] using `==' will always yield false
(x1 == x2)
^
+t5426.scala:8: warning: Int and Some[Int] are unrelated: they will most likely never compare equal
+ (x1 == x2)
+ ^
t5426.scala:9: warning: comparing values of types Some[Int] and Int using `==' will always yield false
(x2 == x1)
^
error: No warnings can be incurred under -Xfatal-warnings.
-four warnings found
+6 warnings found
one error found
diff --git a/test/files/neg/t5663-badwarneq.check b/test/files/neg/t5663-badwarneq.check
index 732e4f44d0..4b7795585b 100644
--- a/test/files/neg/t5663-badwarneq.check
+++ b/test/files/neg/t5663-badwarneq.check
@@ -25,6 +25,9 @@ t5663-badwarneq.scala:72: warning: ValueClass1 and Int are unrelated: they will
t5663-badwarneq.scala:74: warning: comparing values of types Int and ValueClass1 using `==' will always yield false
println(5 == new ValueClass1(5)) // bad
^
+t5663-badwarneq.scala:74: warning: Int and ValueClass1 are unrelated: they will never compare equal
+ println(5 == new ValueClass1(5)) // bad
+ ^
t5663-badwarneq.scala:78: warning: ValueClass2[String] and String are unrelated: they will never compare equal
println(new ValueClass2("abc") == "abc") // bad
^
@@ -38,5 +41,5 @@ t5663-badwarneq.scala:82: warning: comparing values of types ValueClass3 and Int
println(ValueClass3(5) == 5) // bad
^
error: No warnings can be incurred under -Xfatal-warnings.
-13 warnings found
+14 warnings found
one error found
diff --git a/test/files/neg/t5666.check b/test/files/neg/t5666.check
index da6b9d73e7..1c714796ba 100644
--- a/test/files/neg/t5666.check
+++ b/test/files/neg/t5666.check
@@ -1,37 +1,37 @@
t5666.scala:2: error: class Any is abstract; cannot be instantiated
new Any
- ^
+ ^
t5666.scala:3: error: class AnyVal is abstract; cannot be instantiated
new AnyVal
- ^
+ ^
t5666.scala:4: error: class Double is abstract; cannot be instantiated
new Double
- ^
+ ^
t5666.scala:5: error: class Float is abstract; cannot be instantiated
new Float
- ^
+ ^
t5666.scala:6: error: class Long is abstract; cannot be instantiated
new Long
- ^
+ ^
t5666.scala:7: error: class Int is abstract; cannot be instantiated
new Int
- ^
+ ^
t5666.scala:8: error: class Char is abstract; cannot be instantiated
new Char
- ^
+ ^
t5666.scala:9: error: class Short is abstract; cannot be instantiated
new Short
- ^
+ ^
t5666.scala:10: error: class Byte is abstract; cannot be instantiated
new Byte
- ^
+ ^
t5666.scala:11: error: class Boolean is abstract; cannot be instantiated
new Boolean
- ^
+ ^
t5666.scala:12: error: class Unit is abstract; cannot be instantiated
new Unit
- ^
+ ^
t5666.scala:13: error: class Nothing is abstract; cannot be instantiated
new Nothing
- ^
+ ^
12 errors found
diff --git a/test/files/neg/t5761.check b/test/files/neg/t5761.check
index 8086af2fcf..89d766fe34 100644
--- a/test/files/neg/t5761.check
+++ b/test/files/neg/t5761.check
@@ -5,7 +5,7 @@ Unspecified value parameter x.
t5761.scala:8: error: not enough arguments for constructor D: (x: Int)D[Int].
Unspecified value parameter x.
println(new D[Int]()) // no crash
- ^
+ ^
t5761.scala:9: error: not enough arguments for constructor D: (x: Int)D[Int].
Unspecified value parameter x.
println(new D[Int]{}) // crash
diff --git a/test/files/neg/t5803.check b/test/files/neg/t5803.check
index c4f901e511..6a2de2e1df 100644
--- a/test/files/neg/t5803.check
+++ b/test/files/neg/t5803.check
@@ -1,4 +1,4 @@
t5803.scala:3: error: could not find implicit value for parameter ev: Nothing
new Foo(): String
- ^
+ ^
one error found
diff --git a/test/files/neg/t6048.check b/test/files/neg/t6048.check
index 5e11d24fde..f8eddf5471 100644
--- a/test/files/neg/t6048.check
+++ b/test/files/neg/t6048.check
@@ -10,6 +10,9 @@ t6048.scala:13: warning: patterns after a variable pattern cannot match (SLS 8.1
t6048.scala:14: warning: unreachable code due to variable pattern on line 13
case 5 if true => x // unreachable
^
+t6048.scala:14: warning: unreachable code
+ case 5 if true => x // unreachable
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-four warnings found
+5 warnings found
one error found
diff --git a/test/files/neg/t6074.check b/test/files/neg/t6074.check
index 6abf5e2906..38670e5b3d 100644
--- a/test/files/neg/t6074.check
+++ b/test/files/neg/t6074.check
@@ -1,4 +1,4 @@
t6074.scala:5: error: constructor A in class A cannot be accessed in object T
def t = new A()
- ^
+ ^
one error found
diff --git a/test/files/neg/t6120.check b/test/files/neg/t6120.check
new file mode 100644
index 0000000000..a7d17e29cf
--- /dev/null
+++ b/test/files/neg/t6120.check
@@ -0,0 +1,20 @@
+t6120.scala:5: warning: postfix operator bippy should be enabled
+by making the implicit value scala.language.postfixOps visible.
+This can be achieved by adding the import clause 'import scala.language.postfixOps'
+or by setting the compiler option -language:postfixOps.
+See the Scala docs for value scala.language.postfixOps for a discussion
+why the feature should be explicitly enabled.
+ def f = null == null bippy
+ ^
+t6120.scala:5: warning: method bippy in class BooleanOps is deprecated: bobo
+ def f = null == null bippy
+ ^
+t6120.scala:5: warning: comparing values of types Null and Null using `==' will always yield true
+ def f = null == null bippy
+ ^
+t6120.scala:6: warning: method bippy in class BooleanOps is deprecated: bobo
+ def g = true.bippy
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+four warnings found
+one error found
diff --git a/test/files/neg/t6120.flags b/test/files/neg/t6120.flags
new file mode 100644
index 0000000000..04d7c7d417
--- /dev/null
+++ b/test/files/neg/t6120.flags
@@ -0,0 +1 @@
+-feature -deprecation -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/t6120.scala b/test/files/neg/t6120.scala
new file mode 100644
index 0000000000..425f09db47
--- /dev/null
+++ b/test/files/neg/t6120.scala
@@ -0,0 +1,7 @@
+class A {
+ implicit class BooleanOps(val b: Boolean) {
+ @deprecated("bobo", "2.11.0") def bippy() = 5
+ }
+ def f = null == null bippy
+ def g = true.bippy
+}
diff --git a/test/files/neg/t6601.check b/test/files/neg/t6601.check
index b05c67ad9a..1410e1b11a 100644
--- a/test/files/neg/t6601.check
+++ b/test/files/neg/t6601.check
@@ -1,4 +1,4 @@
AccessPrivateConstructor_2.scala:2: error: constructor PrivateConstructor in class PrivateConstructor cannot be accessed in class AccessPrivateConstructor
new PrivateConstructor("") // Scalac should forbid accessing to the private constructor!
- ^
+ ^
one error found
diff --git a/test/files/neg/t6667b.check b/test/files/neg/t6667b.check
index a8705fa1c2..99cea9a47c 100644
--- a/test/files/neg/t6667b.check
+++ b/test/files/neg/t6667b.check
@@ -3,11 +3,11 @@ t6667b.scala:16: error: ambiguous implicit values:
and value b of type Test.Box
match expected type Test.Box
new Test()
- ^
+ ^
t6667b.scala:19: error: ambiguous implicit values:
both value a in object Test of type => Test.Box
and value b of type Test.Box
match expected type Test.Box
new Test()
- ^
+ ^
two errors found
diff --git a/test/files/neg/t7385.check b/test/files/neg/t7385.check
index c196ec0b4f..70d3c3fb61 100644
--- a/test/files/neg/t7385.check
+++ b/test/files/neg/t7385.check
@@ -1,7 +1,10 @@
-t7385.scala:2: error: parenthesized conditional expression expected
+t7385.scala:2: error: '(' expected but identifier found.
do { println("bippy") } while i<10
^
-t7385.scala:6: error: parenthesized conditional expression expected
+t7385.scala:6: error: '(' expected but identifier found.
while i<10 { () }
^
-two errors found
+t7385.scala:7: error: illegal start of simple expression
+}
+^
+three errors found
diff --git a/test/files/neg/t7473.check b/test/files/neg/t7473.check
index c686466a44..bc8c29d463 100644
--- a/test/files/neg/t7473.check
+++ b/test/files/neg/t7473.check
@@ -1,7 +1,7 @@
-t7473.scala:5: error: for comprehension must start with generator: '<-' expected but '=' found.
- for (x = Option(i); if x == j) yield 42 //t7473.scala:4: error: '<-' expected but '=' found.
- ^
-t7473.scala:8: error: for comprehension must start with generator: '<-' expected but '=' found.
+t7473.scala:6: error: '<-' expected but '=' found.
(for (x = Option(i); if x == j) yield 42) toList
^
+t7473.scala:6: error: illegal start of simple expression
+ (for (x = Option(i); if x == j) yield 42) toList
+ ^
two errors found
diff --git a/test/files/neg/t7473.scala b/test/files/neg/t7473.scala
index 1eb9e6cb7a..593231d5f2 100644
--- a/test/files/neg/t7473.scala
+++ b/test/files/neg/t7473.scala
@@ -1,9 +1,7 @@
object Foo {
val i,j = 3
-
- for (x = Option(i); if x == j) yield 42 //t7473.scala:4: error: '<-' expected but '=' found.
-
+ //for (x = Option(i); if x == j) yield 42 //t7473.scala:4: error: '<-' expected but '=' found.
// evil postfix!
(for (x = Option(i); if x == j) yield 42) toList
}
diff --git a/test/files/neg/t7629-view-bounds-deprecation.check b/test/files/neg/t7629-view-bounds-deprecation.check
new file mode 100644
index 0000000000..ed77c15c54
--- /dev/null
+++ b/test/files/neg/t7629-view-bounds-deprecation.check
@@ -0,0 +1,11 @@
+t7629-view-bounds-deprecation.scala:2: warning: View bounds are deprecated. Use an implicit parameter instead.
+Example: Instead of `def f[A <% Int](a: A)` use `def f[A](a: A)(implicit ev: A => Int)`.
+ def f[A <% Int](a: A) = null
+ ^
+t7629-view-bounds-deprecation.scala:3: warning: View bounds are deprecated. Use an implicit parameter instead.
+Example: Instead of `def f[A <% Int](a: A)` use `def f[A](a: A)(implicit ev: A => Int)`.
+ def g[C, B <: C, A <% B : Numeric](a: A) = null
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+two warnings found
+one error found
diff --git a/test/files/neg/t7629-view-bounds-deprecation.flags b/test/files/neg/t7629-view-bounds-deprecation.flags
new file mode 100644
index 0000000000..43a25d4ccc
--- /dev/null
+++ b/test/files/neg/t7629-view-bounds-deprecation.flags
@@ -0,0 +1 @@
+-deprecation -Xfatal-warnings -Xfuture
diff --git a/test/files/neg/t7629-view-bounds-deprecation.scala b/test/files/neg/t7629-view-bounds-deprecation.scala
new file mode 100644
index 0000000000..a6ede1fcc3
--- /dev/null
+++ b/test/files/neg/t7629-view-bounds-deprecation.scala
@@ -0,0 +1,4 @@
+object Test {
+ def f[A <% Int](a: A) = null
+ def g[C, B <: C, A <% B : Numeric](a: A) = null
+}
diff --git a/test/files/neg/t771.check b/test/files/neg/t771.check
index 51b0c97f8c..c0d1e002f8 100644
--- a/test/files/neg/t771.check
+++ b/test/files/neg/t771.check
@@ -1,4 +1,4 @@
t771.scala:4: error: trait Iterator is abstract; cannot be instantiated
def c[A](it:java.util.Iterator[A]) = new scala.Iterator[A]
- ^
+ ^
one error found
diff --git a/test/files/neg/t7721.check b/test/files/neg/t7721.check
index e056b9a293..ade1ca3b20 100644
--- a/test/files/neg/t7721.check
+++ b/test/files/neg/t7721.check
@@ -7,6 +7,9 @@ t7721.scala:15: warning: abstract type pattern A.this.Foo is unchecked since it
t7721.scala:19: warning: abstract type pattern A.this.Foo is unchecked since it is eliminated by erasure
case x: Foo with Bar => x.bippy + x.barry
^
+t7721.scala:19: warning: abstract type pattern A.this.Bar is unchecked since it is eliminated by erasure
+ case x: Foo with Bar => x.bippy + x.barry
+ ^
t7721.scala:39: warning: abstract type pattern B.this.Foo is unchecked since it is eliminated by erasure
case x: Foo with Concrete => x.bippy + x.dingo + x.conco
^
@@ -16,6 +19,9 @@ t7721.scala:43: warning: abstract type pattern B.this.Foo is unchecked since it
t7721.scala:47: warning: abstract type pattern B.this.Foo is unchecked since it is eliminated by erasure
case x: Foo with Bar with Concrete => x.bippy + x.barry + x.dingo + x.conco + x.bongo
^
+t7721.scala:47: warning: abstract type pattern B.this.Bar is unchecked since it is eliminated by erasure
+ case x: Foo with Bar with Concrete => x.bippy + x.barry + x.dingo + x.conco + x.bongo
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-6 warnings found
+8 warnings found
one error found
diff --git a/test/files/neg/t7756b.check b/test/files/neg/t7756b.check
index 2817a7e230..e764783241 100644
--- a/test/files/neg/t7756b.check
+++ b/test/files/neg/t7756b.check
@@ -1,6 +1,9 @@
t7756b.scala:3: warning: comparing values of types Int and String using `==' will always yield false
case _ => 0 == ""
^
+t7756b.scala:3: warning: Int and String are unrelated: they will most likely never compare equal
+ case _ => 0 == ""
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-one warning found
+two warnings found
one error found
diff --git a/test/files/neg/t7848-interp-warn.check b/test/files/neg/t7848-interp-warn.check
new file mode 100644
index 0000000000..b7df6d8ce2
--- /dev/null
+++ b/test/files/neg/t7848-interp-warn.check
@@ -0,0 +1,12 @@
+t7848-interp-warn.scala:8: warning: `$foo` looks like an interpolated identifier! Did you forget the interpolator?
+ "An important $foo message!"
+ ^
+t7848-interp-warn.scala:12: warning: That looks like an interpolated expression! Did you forget the interpolator?
+ "A doubly important ${foo * 2} message!"
+ ^
+t7848-interp-warn.scala:16: warning: `$bar` looks like an interpolated identifier! Did you forget the interpolator?
+ def j = s"Try using '${ "something like $bar" }' instead." // warn
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+three warnings found
+one error found
diff --git a/test/files/neg/t7848-interp-warn.flags b/test/files/neg/t7848-interp-warn.flags
new file mode 100644
index 0000000000..7949c2afa2
--- /dev/null
+++ b/test/files/neg/t7848-interp-warn.flags
@@ -0,0 +1 @@
+-Xlint -Xfatal-warnings
diff --git a/test/files/neg/t7848-interp-warn.scala b/test/files/neg/t7848-interp-warn.scala
new file mode 100644
index 0000000000..3887aff8de
--- /dev/null
+++ b/test/files/neg/t7848-interp-warn.scala
@@ -0,0 +1,18 @@
+
+package test
+
+object Test {
+ def bar = "bar"
+ def f = {
+ val foo = "bar"
+ "An important $foo message!"
+ }
+ def g = {
+ val foo = "bar"
+ "A doubly important ${foo * 2} message!"
+ }
+ def h = s"Try using '$$bar' instead." // no warn
+ def i = s"Try using '${ "$bar" }' instead." // no warn on space test
+ def j = s"Try using '${ "something like $bar" }' instead." // warn
+ def k = f"Try using '$bar' instead." // no warn on other std interps
+}
diff --git a/test/files/neg/t7859.check b/test/files/neg/t7859.check
new file mode 100644
index 0000000000..5789e2a122
--- /dev/null
+++ b/test/files/neg/t7859.check
@@ -0,0 +1,19 @@
+B_2.scala:6: error: not found: value x
+ new p1.A(x).x
+ ^
+B_2.scala:6: error: value x in class A cannot be accessed in p1.A
+ new p1.A(x).x
+ ^
+B_2.scala:7: error: not found: value x
+ new B(x).x
+ ^
+B_2.scala:7: error: value x is not a member of B
+ new B(x).x
+ ^
+B_2.scala:8: error: not found: value x
+ new C(x).x
+ ^
+B_2.scala:8: error: value x in class C cannot be accessed in C
+ new C(x).x
+ ^
+6 errors found
diff --git a/test/files/neg/t7859/A_1.scala b/test/files/neg/t7859/A_1.scala
new file mode 100644
index 0000000000..e5b32d1c96
--- /dev/null
+++ b/test/files/neg/t7859/A_1.scala
@@ -0,0 +1,5 @@
+package p1 {
+ class A(private[p1] val x: Any) extends AnyVal
+}
+class B(private val x: Any) extends AnyVal
+
diff --git a/test/files/neg/t7859/B_2.scala b/test/files/neg/t7859/B_2.scala
new file mode 100644
index 0000000000..2e0556bc7b
--- /dev/null
+++ b/test/files/neg/t7859/B_2.scala
@@ -0,0 +1,9 @@
+class C(private val x: Any) extends AnyVal
+
+// Checking that makeNotPrivate(paramAccessor) doesn't make this visible during typer.
+// The output is identical with/without `extends AnyVal`.
+object Test {
+ new p1.A(x).x
+ new B(x).x
+ new C(x).x
+}
diff --git a/test/files/neg/t7870.check b/test/files/neg/t7870.check
new file mode 100644
index 0000000000..d9db911ac1
--- /dev/null
+++ b/test/files/neg/t7870.check
@@ -0,0 +1,4 @@
+t7870.scala:1: error: in class C, multiple overloaded alternatives of constructor C define default arguments.
+class C(a: Int = 0, b: Any) {
+ ^
+one error found
diff --git a/test/files/neg/t7870.scala b/test/files/neg/t7870.scala
new file mode 100644
index 0000000000..5d48d43b3a
--- /dev/null
+++ b/test/files/neg/t7870.scala
@@ -0,0 +1,3 @@
+class C(a: Int = 0, b: Any) {
+ def this(a: Int = 0) = this(???, ???)
+}
diff --git a/test/files/neg/t7877.check b/test/files/neg/t7877.check
new file mode 100644
index 0000000000..7f7f832463
--- /dev/null
+++ b/test/files/neg/t7877.check
@@ -0,0 +1,7 @@
+t7877.scala:6: error: not found: value Y
+ case Y() => () // not allowed
+ ^
+t7877.scala:7: error: OnNext[Any] does not take parameters
+ case OnNext[Any]() => () // should *not* be allowed, but was.
+ ^
+two errors found
diff --git a/test/files/neg/t7877.scala b/test/files/neg/t7877.scala
new file mode 100644
index 0000000000..52e167f3b8
--- /dev/null
+++ b/test/files/neg/t7877.scala
@@ -0,0 +1,13 @@
+class Test {
+ val X: OnNext[Any] = null
+ def Y: OnNext[Any] = null
+ (null: Any) match {
+ case X() => () // allowed
+ case Y() => () // not allowed
+ case OnNext[Any]() => () // should *not* be allowed, but was.
+ }
+}
+
+class OnNext[+T] {
+ def unapply(x: Any) = false
+}
diff --git a/test/files/neg/unreachablechar.check b/test/files/neg/unreachablechar.check
index 121f12a0c7..a621196c56 100644
--- a/test/files/neg/unreachablechar.check
+++ b/test/files/neg/unreachablechar.check
@@ -4,6 +4,9 @@ unreachablechar.scala:4: warning: patterns after a variable pattern cannot match
unreachablechar.scala:5: warning: unreachable code due to variable pattern on line 4
case 'f' => println("not stuff?");
^
+unreachablechar.scala:5: warning: unreachable code
+ case 'f' => println("not stuff?");
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-two warnings found
+three warnings found
one error found
diff --git a/test/files/neg/valueclasses.check b/test/files/neg/valueclasses.check
index 3b82a8358c..35d38aae60 100644
--- a/test/files/neg/valueclasses.check
+++ b/test/files/neg/valueclasses.check
@@ -4,40 +4,43 @@ trait T extends AnyVal // fail
valueclasses.scala:6: error: value class may not be a member of another class
class Bar(x: Int) extends AnyVal // fail
^
+valueclasses.scala:6: error: value class parameter must be a val and not be private[this]
+ class Bar(x: Int) extends AnyVal // fail
+ ^
valueclasses.scala:8: error: value class may not be a local class
class Baz(x: Int) extends AnyVal // fail
^
-valueclasses.scala:12: error: value class needs to have exactly one public val parameter
+valueclasses.scala:8: error: value class parameter must be a val and not be private[this]
+ class Baz(x: Int) extends AnyVal // fail
+ ^
+valueclasses.scala:12: error: value class needs to have exactly one val parameter
class V1 extends AnyVal // fail
^
-valueclasses.scala:14: error: value class needs to have a publicly accessible val parameter
-class V2(private[test] val x: Int) extends AnyVal // fail
- ^
-valueclasses.scala:15: error: value class needs to have a publicly accessible val parameter
-class V3(protected[test] val x: Int) extends AnyVal // fail
- ^
-valueclasses.scala:16: error: value class needs to have a publicly accessible val parameter
-class V4(protected val x: Int) extends AnyVal // fail
- ^
-valueclasses.scala:17: error: value class needs to have a publicly accessible val parameter
-class V5(private val x: Int) extends AnyVal // fail
- ^
-valueclasses.scala:19: error: value class needs to have exactly one public val parameter
+valueclasses.scala:19: error: value class needs to have exactly one val parameter
class V6(val x: Int, val y: String) extends AnyVal // fail
^
-valueclasses.scala:20: error: field definition is not allowed in value class
+valueclasses.scala:20: error: value class needs to have exactly one val parameter
class V7(val x: Int, private[this] val y: String) extends AnyVal // fail
- ^
-valueclasses.scala:21: error: value class needs to have exactly one public val parameter
-class V8(var x: Int) extends AnyVal // fail
^
+valueclasses.scala:21: error: value class parameter must not be a var
+class V8(var x: Int) extends AnyVal // fail
+ ^
valueclasses.scala:24: error: field definition is not allowed in value class
val y = x // fail
^
valueclasses.scala:29: error: type parameter of value class may not be specialized
class V12[@specialized T, U](val x: (T, U)) extends AnyVal // fail
^
-valueclasses.scala:31: error: value class needs to have exactly one public val parameter
+valueclasses.scala:31: error: value class parameter must be a val and not be private[this]
class V13(x: Int) extends AnyVal // fail
+ ^
+valueclasses.scala:33: error: value class parameter must be a val and not be private[this]
+class V14(private[this] val x: Int) extends AnyVal // fail
+ ^
+valueclasses.scala:34: error: value class parameter must not be protected[this]
+class V15(protected[this] val x: Int) extends AnyVal // fail
+ ^
+valueclasses.scala:36: error: value class needs to have exactly one val parameter
+class V16()(val a: Any) extends AnyVal // fail, was allowed 2.10.x
^
-14 errors found
+15 errors found
diff --git a/test/files/neg/valueclasses.scala b/test/files/neg/valueclasses.scala
index 7cac94ab11..06fde40a70 100644
--- a/test/files/neg/valueclasses.scala
+++ b/test/files/neg/valueclasses.scala
@@ -11,10 +11,10 @@ class Foo {
class V1 extends AnyVal // fail
-class V2(private[test] val x: Int) extends AnyVal // fail
-class V3(protected[test] val x: Int) extends AnyVal // fail
-class V4(protected val x: Int) extends AnyVal // fail
-class V5(private val x: Int) extends AnyVal // fail
+class V2(private[test] val x: Int) extends AnyVal // okay, wasn't allowed in 2.10.x
+class V3(protected[test] val x: Int) extends AnyVal // okay, wasn't allowed in 2.10.x
+class V4(protected val x: Int) extends AnyVal // okay, wasn't allowed in 2.10.x
+class V5(private val x: Int) extends AnyVal // okay, wasn't allowed in 2.10.x
class V6(val x: Int, val y: String) extends AnyVal // fail
class V7(val x: Int, private[this] val y: String) extends AnyVal // fail
@@ -29,3 +29,8 @@ class V11[T](val x: List[T]) extends AnyVal // ok
class V12[@specialized T, U](val x: (T, U)) extends AnyVal // fail
class V13(x: Int) extends AnyVal // fail
+
+class V14(private[this] val x: Int) extends AnyVal // fail
+class V15(protected[this] val x: Int) extends AnyVal // fail
+
+class V16()(val a: Any) extends AnyVal // fail, was allowed 2.10.x
diff --git a/test/files/neg/warn-unused-privates.check b/test/files/neg/warn-unused-privates.check
index 9c41a33e8f..d012869c93 100644
--- a/test/files/neg/warn-unused-privates.check
+++ b/test/files/neg/warn-unused-privates.check
@@ -16,6 +16,9 @@ warn-unused-privates.scala:35: warning: private val in class Boppy is never used
warn-unused-privates.scala:42: warning: private var in trait Accessors is never used
private var v1: Int = 0 // warn
^
+warn-unused-privates.scala:42: warning: private setter in trait Accessors is never used
+ private var v1: Int = 0 // warn
+ ^
warn-unused-privates.scala:43: warning: private setter in trait Accessors is never used
private var v2: Int = 0 // warn, never set
^
@@ -59,5 +62,5 @@ warn-unused-privates.scala:102: warning: local type OtherThing is never used
type OtherThing = String // warn
^
error: No warnings can be incurred under -Xfatal-warnings.
-20 warnings found
+21 warnings found
one error found
diff --git a/test/files/pos/t7815.scala b/test/files/pos/t7815.scala
new file mode 100644
index 0000000000..12a434c5b0
--- /dev/null
+++ b/test/files/pos/t7815.scala
@@ -0,0 +1,30 @@
+import language.higherKinds
+
+trait Foo[A <: AnyRef] {
+ type Repr
+ def f(a: A): Repr
+ def g(a: A): Option[Repr]
+
+ type M[X]
+ def m(a: A): M[a.type]
+
+ type Id[X] = X
+ def n(a: A): Id[(Repr, M[a.type])]
+
+}
+
+object Foo {
+ type Aux[A <: AnyRef, B] = Foo[A] { type Repr = B; type M[X] = Int }
+
+}
+
+object Main extends App {
+ def mapWithFoo[A <: AnyRef, B](as: List[A])(implicit foo: Foo.Aux[A, B]) = {
+ // Should be Eta expandable because the result type of `f` is not
+ // dependant on the value, it is just `B`.
+ as map foo.f
+ as map foo.g
+ as map foo.m
+ as map foo.n
+ }
+}
diff --git a/test/files/pos/t7854.scala b/test/files/pos/t7854.scala
deleted file mode 100644
index d4de7dfe38..0000000000
--- a/test/files/pos/t7854.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-class A {
- var f: Int => Unit = _ => ()
-
- f = null
-}
diff --git a/test/files/pos/t7864.flags b/test/files/pos/t7864.flags
new file mode 100644
index 0000000000..7ccd56103a
--- /dev/null
+++ b/test/files/pos/t7864.flags
@@ -0,0 +1 @@
+-Xlint \ No newline at end of file
diff --git a/test/files/pos/t7864.scala b/test/files/pos/t7864.scala
new file mode 100644
index 0000000000..b2d8911a17
--- /dev/null
+++ b/test/files/pos/t7864.scala
@@ -0,0 +1,5 @@
+object Test {
+ val f = 0;
+ ({ toString; (x: Any) => x})("$f ")
+}
+
diff --git a/test/files/run/existential-rangepos.check b/test/files/run/existential-rangepos.check
index f426c6471f..1212b60bae 100644
--- a/test/files/run/existential-rangepos.check
+++ b/test/files/run/existential-rangepos.check
@@ -1,13 +1,13 @@
[[syntax trees at end of patmat]] // newSource1.scala
[0:76]package [0:0]<empty> {
- [15/0:76]abstract class A[[17:18]T[17:18]] extends [20:76][76]scala.AnyRef {
+ [0:76]abstract class A[[17:18]T[17:18]] extends [20:76][76]scala.AnyRef {
[76]def <init>(): [20]A[T] = [76]{
[76][76][76]A.super.<init>();
[20]()
};
- [28:51]private[this] val foo: [28]Set[_ <: T] = [47:51]null;
+ [24:51]private[this] val foo: [28]Set[_ <: T] = [47:51]null;
[28]<stable> <accessor> def foo: [28]Set[_ <: T] = [28][28]A.this.foo;
- [58:74]<stable> <accessor> def bar: [58]Set[_ <: T]
+ [54:74]<stable> <accessor> def bar: [58]Set[_ <: T]
}
}
diff --git a/test/files/run/future-flatmap-exec-count.check b/test/files/run/future-flatmap-exec-count.check
new file mode 100644
index 0000000000..dd9dce64ed
--- /dev/null
+++ b/test/files/run/future-flatmap-exec-count.check
@@ -0,0 +1,6 @@
+mapping
+execute()
+flatmapping
+execute()
+recovering
+execute()
diff --git a/test/files/run/future-flatmap-exec-count.scala b/test/files/run/future-flatmap-exec-count.scala
new file mode 100644
index 0000000000..86c37be938
--- /dev/null
+++ b/test/files/run/future-flatmap-exec-count.scala
@@ -0,0 +1,61 @@
+import scala.concurrent._
+import java.util.concurrent.atomic.AtomicInteger
+
+object Test {
+ def main(args: Array[String]) {
+ test()
+ }
+
+ def test() = {
+ def await(f: Future[Any]) =
+ Await.result(f, duration.Duration.Inf)
+
+ val ec = new TestExecutionContext(ExecutionContext.Implicits.global)
+
+ {
+ val p = Promise[Int]()
+ val fp = p.future
+ println("mapping")
+ val mapped = fp.map(x => x)(ec)
+ p.success(0)
+ await(mapped)
+ }
+
+ {
+ println("flatmapping")
+ val p = Promise[Int]()
+ val fp = p.future
+ val flatMapped = fp.flatMap({ (x: Int) =>
+ Future.successful(2 * x)
+ })(ec)
+ p.success(0)
+ await(flatMapped)
+ }
+
+ {
+ println("recovering")
+ val recovered = Future.failed(new Throwable()).recoverWith {
+ case _ => Future.successful(2)
+ }(ec)
+ await(recovered)
+ }
+ }
+
+ class TestExecutionContext(delegate: ExecutionContext) extends ExecutionContext {
+ def execute(runnable: Runnable): Unit = ???
+
+ def reportFailure(t: Throwable): Unit = ???
+
+ override def prepare(): ExecutionContext = {
+ val preparedDelegate = delegate.prepare()
+ return new ExecutionContext {
+ def execute(runnable: Runnable): Unit = {
+ println("execute()")
+ preparedDelegate.execute(runnable)
+ }
+
+ def reportFailure(t: Throwable): Unit = ???
+ }
+ }
+ }
+}
diff --git a/test/files/run/macro-bundle-repl.check b/test/files/run/macro-bundle-repl.check
new file mode 100644
index 0000000000..b9c809f037
--- /dev/null
+++ b/test/files/run/macro-bundle-repl.check
@@ -0,0 +1,24 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala> import scala.language.experimental.macros
+import scala.language.experimental.macros
+
+scala> import scala.reflect.macros.Macro
+import scala.reflect.macros.Macro
+
+scala> trait Bar extends Macro { def impl = c.literalUnit };def bar = macro Bar.impl
+defined trait Bar
+defined term macro bar: Unit
+
+scala> bar
+
+scala> trait Foo extends Macro { def impl = c.literalUnit }
+defined trait Foo
+
+scala> def foo = macro Foo.impl
+defined term macro foo: Unit
+
+scala> foo
+
+scala>
diff --git a/test/files/run/macro-bundle-repl.scala b/test/files/run/macro-bundle-repl.scala
new file mode 100644
index 0000000000..50783c8cba
--- /dev/null
+++ b/test/files/run/macro-bundle-repl.scala
@@ -0,0 +1,13 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+import scala.language.experimental.macros
+import scala.reflect.macros.Macro
+trait Bar extends Macro { def impl = c.literalUnit };def bar = macro Bar.impl
+bar
+trait Foo extends Macro { def impl = c.literalUnit }
+def foo = macro Foo.impl
+foo
+ """
+} \ No newline at end of file
diff --git a/test/files/run/macro-bundle-static.check b/test/files/run/macro-bundle-static.check
new file mode 100644
index 0000000000..37c8eaf27a
--- /dev/null
+++ b/test/files/run/macro-bundle-static.check
@@ -0,0 +1,6 @@
+()
+Int
+()
+true
+IntInt
+true
diff --git a/test/files/run/macro-bundle-static/Impls_Macros_1.scala b/test/files/run/macro-bundle-static/Impls_Macros_1.scala
new file mode 100644
index 0000000000..831dac6df5
--- /dev/null
+++ b/test/files/run/macro-bundle-static/Impls_Macros_1.scala
@@ -0,0 +1,31 @@
+import scala.reflect.macros.Context
+import scala.reflect.macros.Macro
+import scala.language.experimental.macros
+
+object Enclosing {
+ trait Impl extends Macro {
+ def mono = c.literalUnit
+ def poly[T: c.WeakTypeTag] = c.literal(c.weakTypeOf[T].toString)
+ def weird = macro mono
+ }
+}
+
+object Macros {
+ def mono = macro Enclosing.Impl.mono
+ def poly[T] = macro Enclosing.Impl.poly[T]
+}
+
+package pkg {
+ object Enclosing {
+ trait Impl extends Macro {
+ def mono = c.literalTrue
+ def poly[T: c.WeakTypeTag] = c.literal(c.weakTypeOf[T].toString + c.weakTypeOf[T].toString)
+ def weird = macro mono
+ }
+ }
+
+ object Macros {
+ def mono = macro Enclosing.Impl.mono
+ def poly[T] = macro Enclosing.Impl.poly[T]
+ }
+} \ No newline at end of file
diff --git a/test/files/run/macro-bundle-static/Test_2.scala b/test/files/run/macro-bundle-static/Test_2.scala
new file mode 100644
index 0000000000..72160f6ec2
--- /dev/null
+++ b/test/files/run/macro-bundle-static/Test_2.scala
@@ -0,0 +1,8 @@
+object Test extends App {
+ println(Macros.mono)
+ println(Macros.poly[Int])
+ println(new Enclosing.Impl{val c = ???}.weird)
+ println(pkg.Macros.mono)
+ println(pkg.Macros.poly[Int])
+ println(new pkg.Enclosing.Impl{val c = ???}.weird)
+} \ No newline at end of file
diff --git a/test/files/run/macro-bundle-toplevel.check b/test/files/run/macro-bundle-toplevel.check
new file mode 100644
index 0000000000..37c8eaf27a
--- /dev/null
+++ b/test/files/run/macro-bundle-toplevel.check
@@ -0,0 +1,6 @@
+()
+Int
+()
+true
+IntInt
+true
diff --git a/test/files/run/macro-bundle.flags b/test/files/run/macro-bundle-toplevel.flags
index cd66464f2f..cd66464f2f 100644
--- a/test/files/run/macro-bundle.flags
+++ b/test/files/run/macro-bundle-toplevel.flags
diff --git a/test/files/run/macro-bundle/Impls_Macros_1.scala b/test/files/run/macro-bundle-toplevel/Impls_Macros_1.scala
index 3f651c9a43..676935682e 100644
--- a/test/files/run/macro-bundle/Impls_Macros_1.scala
+++ b/test/files/run/macro-bundle-toplevel/Impls_Macros_1.scala
@@ -10,4 +10,17 @@ trait Impl extends Macro {
object Macros {
def mono = macro Impl.mono
def poly[T] = macro Impl.poly[T]
+}
+
+package pkg {
+ trait Impl extends Macro {
+ def mono = c.literalTrue
+ def poly[T: c.WeakTypeTag] = c.literal(c.weakTypeOf[T].toString + c.weakTypeOf[T].toString)
+ def weird = macro mono
+ }
+
+ object Macros {
+ def mono = macro Impl.mono
+ def poly[T] = macro Impl.poly[T]
+ }
} \ No newline at end of file
diff --git a/test/files/run/macro-bundle/Test_2.scala b/test/files/run/macro-bundle-toplevel/Test_2.scala
index 428f809f9d..139cc5bef2 100644
--- a/test/files/run/macro-bundle/Test_2.scala
+++ b/test/files/run/macro-bundle-toplevel/Test_2.scala
@@ -2,4 +2,7 @@ object Test extends App {
println(Macros.mono)
println(Macros.poly[Int])
println(new Impl{val c = ???}.weird)
+ println(pkg.Macros.mono)
+ println(pkg.Macros.poly[Int])
+ println(new pkg.Impl{val c = ???}.weird)
} \ No newline at end of file
diff --git a/test/files/run/macro-bundle.check b/test/files/run/macro-bundle.check
deleted file mode 100644
index 2107454960..0000000000
--- a/test/files/run/macro-bundle.check
+++ /dev/null
@@ -1,3 +0,0 @@
-()
-Int
-()
diff --git a/test/files/run/macro-reflective-mamd-normal-mi.check b/test/files/run/macro-reflective-mamd-normal-mi.check
index ac4213d6e9..f77196b2db 100644
--- a/test/files/run/macro-reflective-mamd-normal-mi.check
+++ b/test/files/run/macro-reflective-mamd-normal-mi.check
@@ -1 +1,2 @@
-43 \ No newline at end of file
+warning: there were 1 deprecation warning(s); re-run with -deprecation for details
+43
diff --git a/test/files/run/position-val-def.check b/test/files/run/position-val-def.check
new file mode 100644
index 0000000000..a92c77c68c
--- /dev/null
+++ b/test/files/run/position-val-def.check
@@ -0,0 +1,30 @@
+val x = 0
+[0:9]val x = [8:9]0
+
+var x = 0
+[0:9]var x = [8:9]0
+
+val x, y = 0
+[NoPosition]{
+ [0:5]val x = [11]0;
+ [7:12]val y = [11:12]0;
+ [NoPosition]()
+}
+
+var x, y = 0
+[NoPosition]{
+ [0:5]var x = [11]0;
+ [7:12]var y = [11:12]0;
+ [NoPosition]()
+}
+
+val (x, y) = 0
+[NoPosition]{
+ <0:14><synthetic> <artifact> private[this] val x$1 = <4:14>[13:14][13:14]0: @[13]scala.unchecked match {
+ <4:10>case <4:10>[4]scala.Tuple2(<5:6>(x @ [5]_), <8:9>(y @ [8]_)) => <4:10><4:10>scala.Tuple2(<4:10>x, <4:10>y)
+ };
+ [5:6]val x = [5]x$1._1;
+ [8:9]val y = [8]x$1._2;
+ [NoPosition]()
+}
+
diff --git a/test/files/run/position-val-def.scala b/test/files/run/position-val-def.scala
new file mode 100644
index 0000000000..62cb54acf8
--- /dev/null
+++ b/test/files/run/position-val-def.scala
@@ -0,0 +1,26 @@
+import scala.reflect.runtime.universe._
+import scala.reflect.runtime.{universe => ru}
+import scala.reflect.runtime.{currentMirror => cm}
+import scala.tools.reflect.ToolBox
+
+object Test {
+ val toolbox = cm.mkToolBox(options = "-Yrangepos")
+
+ def main(args: Array[String]) {
+ def test(expr: String) {
+ val t = toolbox.parse(expr)
+ println(expr)
+ println(show(t, printPositions = true))
+ println()
+ }
+ val tests = """
+ val x = 0
+ var x = 0
+ val x, y = 0
+ var x, y = 0
+ val (x, y) = 0
+ """
+ val exprs = tests.split("\\n").map(_.trim).filterNot(_.isEmpty)
+ exprs foreach test
+ }
+}
diff --git a/test/files/run/private-inline.check b/test/files/run/private-inline.check
index 3e44989521..e71aec2fcf 100644
--- a/test/files/run/private-inline.check
+++ b/test/files/run/private-inline.check
@@ -1,7 +1,13 @@
private-inline.scala:24: warning: Could not inline required method wrapper1 because callee contains exception handlers / finally clause, and is invoked with non-empty operand stack.
def f1b() = identity(wrapper1(5))
^
+private-inline.scala:24: warning: At the end of the day, could not inline @inline-marked method wrapper1
+ def f1b() = identity(wrapper1(5))
+ ^
private-inline.scala:29: warning: Could not inline required method wrapper2 because callee contains exception handlers / finally clause, and is invoked with non-empty operand stack.
def f2b() = identity(wrapper2(5))
^
+private-inline.scala:29: warning: At the end of the day, could not inline @inline-marked method wrapper2
+ def f2b() = identity(wrapper2(5))
+ ^
20
diff --git a/test/files/run/repl-power.check b/test/files/run/repl-power.check
index d6a0d8c931..e56901e0f2 100644
--- a/test/files/run/repl-power.check
+++ b/test/files/run/repl-power.check
@@ -11,7 +11,8 @@ scala> :power
scala> // guarding against "error: reference to global is ambiguous"
scala> global.emptyValDef // "it is imported twice in the same scope by ..."
-res0: $r.global.emptyValDef.type = private val _ = _
+warning: there were 1 deprecation warning(s); re-run with -deprecation for details
+res0: $r.global.noSelfType.type = private val _ = _
scala> val tp = ArrayClass[scala.util.Random] // magic with tags
warning: there were 1 feature warning(s); re-run with -feature for details
@@ -20,14 +21,10 @@ tp: $r.global.Type = Array[scala.util.Random]
scala> tp.memberType(Array_apply) // evidence
res1: $r.global.Type = (i: Int)scala.util.Random
-scala> val m = LIT(10) MATCH (CASE(LIT(5)) ==> FALSE, DEFAULT ==> TRUE) // treedsl
-m: $r.treedsl.global.Match =
-10 match {
- case 5 => false
- case _ => true
-}
+scala> val m = LIT(10) // treedsl
+m: $r.treedsl.global.Literal = 10
scala> typed(m).tpe // typed is in scope
-res2: $r.treedsl.global.Type = Boolean
+res2: $r.treedsl.global.Type = Int(10)
scala>
diff --git a/test/files/run/repl-power.scala b/test/files/run/repl-power.scala
index f7c88c63ff..4dfeb37885 100644
--- a/test/files/run/repl-power.scala
+++ b/test/files/run/repl-power.scala
@@ -7,7 +7,7 @@ object Test extends ReplTest {
global.emptyValDef // "it is imported twice in the same scope by ..."
val tp = ArrayClass[scala.util.Random] // magic with tags
tp.memberType(Array_apply) // evidence
-val m = LIT(10) MATCH (CASE(LIT(5)) ==> FALSE, DEFAULT ==> TRUE) // treedsl
+val m = LIT(10) // treedsl
typed(m).tpe // typed is in scope
""".trim
}
diff --git a/test/files/run/showraw_mods.check b/test/files/run/showraw_mods.check
index 3ec868542d..4d34160422 100644
--- a/test/files/run/showraw_mods.check
+++ b/test/files/run/showraw_mods.check
@@ -1 +1 @@
-Block(List(ClassDef(Modifiers(ABSTRACT | DEFAULTPARAM/TRAIT), TypeName("C"), List(), Template(List(Ident(TypeName("AnyRef"))), emptyValDef, List(DefDef(Modifiers(), TermName("$init$"), List(), List(List()), TypeTree(), Block(List(), Literal(Constant(())))), ValDef(Modifiers(PRIVATE | LOCAL), TermName("x"), TypeTree(), Literal(Constant(2))), ValDef(Modifiers(MUTABLE), TermName("y"), TypeTree(), Select(This(TypeName("C")), TermName("x"))), ValDef(Modifiers(LAZY), TermName("z"), TypeTree(), Select(This(TypeName("C")), TermName("y"))))))), Literal(Constant(())))
+Block(List(ClassDef(Modifiers(ABSTRACT | DEFAULTPARAM/TRAIT), TypeName("C"), List(), Template(List(Ident(TypeName("AnyRef"))), noSelfType, List(DefDef(Modifiers(), TermName("$init$"), List(), List(List()), TypeTree(), Block(List(), Literal(Constant(())))), ValDef(Modifiers(PRIVATE | LOCAL), TermName("x"), TypeTree(), Literal(Constant(2))), ValDef(Modifiers(MUTABLE), TermName("y"), TypeTree(), Select(This(TypeName("C")), TermName("x"))), ValDef(Modifiers(LAZY), TermName("z"), TypeTree(), Select(This(TypeName("C")), TermName("y"))))))), Literal(Constant(())))
diff --git a/test/files/run/t2106.check b/test/files/run/t2106.check
index b14e9d1c41..f8f625ff46 100644
--- a/test/files/run/t2106.check
+++ b/test/files/run/t2106.check
@@ -1,3 +1,6 @@
t2106.scala:7: warning: Could not inline required method foo because access level required by callee not matched by caller.
def main(args: Array[String]): Unit = x.foo
^
+t2106.scala:7: warning: At the end of the day, could not inline @inline-marked method foo
+ def main(args: Array[String]): Unit = x.foo
+ ^
diff --git a/test/files/run/t4742.flags b/test/files/run/t4742.flags
new file mode 100644
index 0000000000..ae08446055
--- /dev/null
+++ b/test/files/run/t4742.flags
@@ -0,0 +1 @@
+-Xcheckinit \ No newline at end of file
diff --git a/test/files/run/t4742.scala b/test/files/run/t4742.scala
new file mode 100644
index 0000000000..3b42c0c120
--- /dev/null
+++ b/test/files/run/t4742.scala
@@ -0,0 +1,7 @@
+trait T { val x: Int = 0 }
+object O extends T { override final val x = 1 }
+
+object Test extends App {
+ // was throwing an UnitializedFieldError as constant 1 is folded into the accessor
+ assert((O: T).x == 1)
+}
diff --git a/test/files/run/t5064.check b/test/files/run/t5064.check
index 7b92e40c35..61ccfd16e7 100644
--- a/test/files/run/t5064.check
+++ b/test/files/run/t5064.check
@@ -1,19 +1,19 @@
[53] T5064.super.<init>()
[53] T5064.super.<init>
[53] this
-[20/16:23] immutable.this.List.apply(scala.this.Predef.wrapIntArray(Array[Int]{1}))
+[16:23] immutable.this.List.apply(scala.this.Predef.wrapIntArray(Array[Int]{1}))
[16:20] immutable.this.List.apply
<16:20> immutable.this.List
<16:20> immutable.this
-[20/16:23] scala.this.Predef.wrapIntArray(Array[Int]{1})
+[16:23] scala.this.Predef.wrapIntArray(Array[Int]{1})
[20] scala.this.Predef.wrapIntArray
[20] scala.this.Predef
[20] scala.this
-[29/26:32] collection.this.Seq.apply(scala.this.Predef.wrapIntArray(Array[Int]{1}))
+[26:32] collection.this.Seq.apply(scala.this.Predef.wrapIntArray(Array[Int]{1}))
[26:29] collection.this.Seq.apply
<26:29> collection.this.Seq
<26:29> collection.this
-[29/26:32] scala.this.Predef.wrapIntArray(Array[Int]{1})
+[26:32] scala.this.Predef.wrapIntArray(Array[Int]{1})
[29] scala.this.Predef.wrapIntArray
[29] scala.this.Predef
[29] scala.this
diff --git a/test/files/run/t5385.check b/test/files/run/t5385.check
index f56464facd..1df74fcfb5 100644
--- a/test/files/run/t5385.check
+++ b/test/files/run/t5385.check
@@ -1,8 +1,8 @@
-[6/0:9] class Azz
-[6/0:9] class Bzz
-[6/0:9] class Czz
-[6/0:9] class Dzz
-[6/0:11] class Ezz
-[6/0:11] class Fzz
-[6/0:13] class Gzz
-[6/0:13] class Hzz
+[0:9] class Azz
+[0:9] class Bzz
+[0:9] class Czz
+[0:9] class Dzz
+[0:11] class Ezz
+[0:11] class Fzz
+[0:13] class Gzz
+[0:13] class Hzz
diff --git a/test/files/run/t5603.check b/test/files/run/t5603.check
index 46fcdd4470..188f39ff82 100644
--- a/test/files/run/t5603.check
+++ b/test/files/run/t5603.check
@@ -1,29 +1,29 @@
[[syntax trees at end of parser]] // newSource1.scala
[0:241]package [0:0]<empty> {
- [6/0:82]abstract trait Greeting extends [15:82][83]scala.AnyRef {
+ [0:82]abstract trait Greeting extends [15:82][83]scala.AnyRef {
[15]def $init$() = [15]{
[15]()
};
- [27:39]val name: [33:39]String;
- [50:76]val msg = [71/56:76][71/56:72][56:71]"How are you, ".$plus([72:76]name)
+ [23:39]val name: [33:39]String;
+ [46:76]val msg = [56:76][56:72][56:71]"How are you, ".$plus([72:76]name)
};
- [93/87:209]class C extends [94:209][151:159]Greeting {
- [123:139]val nameElse = _;
+ [87:209]class C extends [94:209][151:159]Greeting {
+ [119:139]val nameElse = _;
[95:101]<paramaccessor> private[this] val i: [98:101]Int = _;
- <123:139>def <init>([95]i: [98]Int) = <123:139>{
- <123:139>val nameElse = <134:139>"Bob";
- [X][X][X]super.<init>();
+ <119:139>def <init>([95]i: [98]Int) = <119:139>{
+ <119:139>val nameElse = <134:139>"Bob";
+ [NoPosition][NoPosition][NoPosition]super.<init>();
[94]()
};
- [172:184]val name = [179:184]"avc";
- [198/191:203][191:198]println([199:202]msg)
+ [168:184]val name = [179:184]"avc";
+ [191:203][191:198]println([199:202]msg)
};
- [222/215:241]object Test extends [227:241][235:238]App {
+ [215:241]object Test extends [227:241][235:238]App {
[227]def <init>() = [227]{
- [X][X][X]super.<init>();
+ [NoPosition][NoPosition][NoPosition]super.<init>();
[227]()
};
- [X]<empty>
+ [NoPosition]<empty>
}
}
diff --git a/test/files/run/t6288.check b/test/files/run/t6288.check
index 0da03c0439..a032a10de6 100644
--- a/test/files/run/t6288.check
+++ b/test/files/run/t6288.check
@@ -18,7 +18,7 @@
[64]case6(){
[64][64]matchEnd4([64]throw [64][64][64]new [64]MatchError([64]x1))
};
- [64]matchEnd4(x: [X]Unit){
+ [64]matchEnd4(x: [NoPosition]Unit){
[64]x
}
}
@@ -44,7 +44,7 @@
[175]case6(){
[175][175]matchEnd4([175]throw [175][175][175]new [175]MatchError([175]x1))
};
- [175]matchEnd4(x: [X]Unit){
+ [175]matchEnd4(x: [NoPosition]Unit){
[175]x
}
}
@@ -70,7 +70,7 @@
[273]case6(){
[273][273]matchEnd4([273]throw [273][273][273]new [273]MatchError([273]x1))
};
- [273]matchEnd4(x: [X]Unit){
+ [273]matchEnd4(x: [NoPosition]Unit){
[273]x
}
}
diff --git a/test/files/run/t6392b.check b/test/files/run/t6392b.check
index 1ccfced1c6..c2cc103373 100644
--- a/test/files/run/t6392b.check
+++ b/test/files/run/t6392b.check
@@ -1 +1 @@
-ModuleDef(Modifiers(), TermName("C")#MOD, Template(List(Select(Ident(scala#PK), TypeName("AnyRef")#TPE)), emptyValDef, List(DefDef(Modifiers(), nme.CONSTRUCTOR#PCTOR, List(), List(List()), TypeTree(), Block(List(Apply(Select(Super(This(TypeName("C")), tpnme.EMPTY), nme.CONSTRUCTOR#PCTOR), List())), Literal(Constant(())))))))
+ModuleDef(Modifiers(), TermName("C")#MOD, Template(List(Select(Ident(scala#PK), TypeName("AnyRef")#TPE)), noSelfType, List(DefDef(Modifiers(), nme.CONSTRUCTOR#PCTOR, List(), List(List()), TypeTree(), Block(List(Apply(Select(Super(This(TypeName("C")), tpnme.EMPTY), nme.CONSTRUCTOR#PCTOR), List())), Literal(Constant(())))))))
diff --git a/test/files/run/t6719.check b/test/files/run/t6719.check
new file mode 100644
index 0000000000..6a452c185a
--- /dev/null
+++ b/test/files/run/t6719.check
@@ -0,0 +1 @@
+()
diff --git a/test/files/run/t6719.scala b/test/files/run/t6719.scala
new file mode 100644
index 0000000000..847929a95d
--- /dev/null
+++ b/test/files/run/t6719.scala
@@ -0,0 +1,8 @@
+import scala.reflect.runtime.universe._
+import scala.reflect.runtime.{currentMirror => cm}
+import scala.tools.reflect.{ToolBox, ToolBoxError}
+object Test extends App {
+ val tb = cm.mkToolBox()
+ val tree = tb.parse("(); val res = 0")
+ println(tb.eval(tree))
+} \ No newline at end of file
diff --git a/test/files/run/t6768.check b/test/files/run/t6768.check
deleted file mode 100644
index 64df4568ec..0000000000
--- a/test/files/run/t6768.check
+++ /dev/null
@@ -1,12 +0,0 @@
-[[syntax trees at end of typer]] // newSource1.scala
-[1:58]package [1:1]<empty> {
- [7/1:58]class A extends [9:58][58]scala.AnyRef {
- [58]def <init>(): [9]A = [58]{
- [58][58][58]A.super.<init>();
- [9]()
- };
- [17/13:31]def f1: [17]Some[String] = [26/22:31][22:26][22:26]scala.Some.apply[[22]String]([27:30]"a");
- [38/34:56]def f2: [38]Some[String] = [47/43:56][47:51][47:51]new [47:51]<type: [47:51]scala.Some>([52:55]"b")
- }
-}
-
diff --git a/test/files/run/t6768.scala b/test/files/run/t6768.scala
deleted file mode 100644
index 11470a0ef8..0000000000
--- a/test/files/run/t6768.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-import scala.tools.partest._
-
-object Test extends DirectTest {
- override def extraSettings: String = "-usejavacp -Xprint:typer -Yrangepos -Xprint-pos -d " + testOutput.path
- override def show() = Console.withErr(System.out)(compile())
-
- override def code = """
-class A {
- def f1 = Some("a")
- def f2 = new Some("b")
-}"""
-}
diff --git a/test/files/run/t7271.check b/test/files/run/t7271.check
index 86b5230fd7..f7a23018ca 100644
--- a/test/files/run/t7271.check
+++ b/test/files/run/t7271.check
@@ -2,7 +2,7 @@
[6]package [6]<empty> {
[6]class C extends [8][91]scala.AnyRef {
[8]def <init>() = [8]{
- [X][X][X]super.<init>();
+ [NoPosition][NoPosition][NoPosition]super.<init>();
[8]()
};
[20]def quote = [28][28][28][28]StringContext([30]"foo", [40]"baz").s([35]this);
diff --git a/test/files/run/t7331c.check b/test/files/run/t7331c.check
index fd3ac1d9ef..b35d831f83 100644
--- a/test/files/run/t7331c.check
+++ b/test/files/run/t7331c.check
@@ -1,3 +1,3 @@
-ClassDef(Modifiers(), TypeName("C"), List(), Template(List(Select(Ident(scala), TypeName("AnyRef"))), emptyValDef, List(DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(), Block(List(pendingSuperCall), Literal(Constant(())))))))
+ClassDef(Modifiers(), TypeName("C"), List(), Template(List(Select(Ident(scala), TypeName("AnyRef"))), noSelfType, List(DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(), Block(List(pendingSuperCall), Literal(Constant(())))))))
source-<toolbox>,line-1,offset=6
NoPosition
diff --git a/test/files/run/t7398.scala b/test/files/run/t7398.scala
index dd59697b71..493c4dcf40 100644
--- a/test/files/run/t7398.scala
+++ b/test/files/run/t7398.scala
@@ -3,11 +3,9 @@ import scala.tools.partest._
object Test extends CompilerTest {
import global._
- // This way we auto-pass on non-java8 since there's nothing to check
- override lazy val units: List[CompilationUnit] = testUnderJavaAtLeast("1.8") {
+ override lazy val units: List[CompilationUnit] = {
+ // This test itself does not depend on JDK8.
javaCompilationUnits(global)(defaultMethodSource)
- } otherwise {
- Nil
}
private def defaultMethodSource = """
diff --git a/test/files/run/t7825.scala b/test/files/run/t7825.scala
new file mode 100644
index 0000000000..65ca06fdfc
--- /dev/null
+++ b/test/files/run/t7825.scala
@@ -0,0 +1,34 @@
+import scala.tools.partest._
+
+object Test extends CompilerTest {
+ import global._
+
+ override lazy val units: List[CompilationUnit] = {
+ // We can test this on JDK6.
+ javaCompilationUnits(global)(defaultMethodSource) ++ compilationUnits(global)(scalaExtendsDefault)
+ }
+
+ private def defaultMethodSource = """
+public interface Iterator<E> {
+ boolean hasNext();
+ E next();
+ default void remove() {
+ throw new UnsupportedOperationException("remove");
+ }
+}
+ """
+
+ private def scalaExtendsDefault = """
+object Test {
+ object X extends Iterator[String] {
+ def hasNext = true
+ def next = "!"
+ }
+}
+ """
+
+ // We're only checking we that the Scala compilation unit passes refchecks
+ // No further checks are needed here.
+ def check(source: String, unit: global.CompilationUnit): Unit = {
+ }
+}
diff --git a/test/files/run/t7852.check b/test/files/run/t7852.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/files/run/t7852.check
diff --git a/test/files/run/t7852.flags b/test/files/run/t7852.flags
new file mode 100644
index 0000000000..f6262fd3e0
--- /dev/null
+++ b/test/files/run/t7852.flags
@@ -0,0 +1 @@
+-Ynooptimise
diff --git a/test/files/run/t7852.scala b/test/files/run/t7852.scala
new file mode 100644
index 0000000000..c93db718fd
--- /dev/null
+++ b/test/files/run/t7852.scala
@@ -0,0 +1,39 @@
+import scala.tools.partest.BytecodeTest
+import scala.tools.asm
+import scala.tools.asm.util._
+import scala.tools.nsc.util.stringFromWriter
+import scala.collection.JavaConverters._
+
+object Test extends BytecodeTest {
+ val nullChecks = Set(asm.Opcodes.IFNONNULL, asm.Opcodes.IFNULL)
+
+ def show: Unit = {
+ def test(methodName: String, expected: Int) {
+ val classNode = loadClassNode("Lean")
+ val methodNode = getMethod(classNode, methodName)
+ val got = countNullChecks(methodNode.instructions)
+ assert(got == expected, s"expected $expected but got $got comparisons")
+ }
+ test("string", expected = 0)
+ test("module", expected = 0)
+ test("moduleIndirect", expected = 2)
+ }
+
+ def countNullChecks(insnList: asm.tree.InsnList): Int =
+ insnList.iterator.asScala.map(_.getOpcode).count(nullChecks)
+}
+
+class Lean {
+ def string {
+ "" == toString
+ }
+
+ def module {
+ Nil == (toString: Any)
+ }
+
+ def moduleIndirect {
+ val n: Nil.type = null
+ n == (toString: Any) // still need null checks here.
+ }
+}
diff --git a/test/files/run/t7859/A_1.scala b/test/files/run/t7859/A_1.scala
new file mode 100644
index 0000000000..74f0709d4d
--- /dev/null
+++ b/test/files/run/t7859/A_1.scala
@@ -0,0 +1,11 @@
+class A(private val x: Int) extends AnyVal
+
+object A {
+ val Const = new A(0)
+}
+
+class A1(protected val x: Int) extends AnyVal
+
+package p {
+ class A2(private[p] val x: Int) extends AnyVal
+}
diff --git a/test/files/run/t7859/B_2.scala b/test/files/run/t7859/B_2.scala
new file mode 100644
index 0000000000..6b23af3abb
--- /dev/null
+++ b/test/files/run/t7859/B_2.scala
@@ -0,0 +1,47 @@
+class B private (private val b: Int) extends AnyVal
+object B {
+ val Const = new B(0)
+}
+
+// These tests will require erasure to unbox the value class.
+// We need to test under joint and separate compilation to check
+// that the 'notPRIVATE' flag on the param accessor is pickled.
+//
+// See also SI-6601.
+object Test {
+ def main(args: Array[String]) {
+ unboxA
+ unboxA1
+ unboxA2
+ unboxB
+ }
+
+ def unboxA {
+ val o: Some[A] = Some(A.Const)
+ val a = o.get
+ def id(a: A): A = a
+ id(a)
+ }
+
+ def unboxA1 {
+ val o: Some[A1] = Some(new A1(0))
+ val a = o.get
+ def id(a: A1): A1 = a
+ id(a)
+ }
+
+ def unboxA2 {
+ import p.A2
+ val o: Some[A2] = Some(new A2(0))
+ val a = o.get
+ def id(a: A2): A2 = a
+ id(a)
+ }
+
+ def unboxB {
+ val o: Some[B] = Some(B.Const)
+ val b = o.get
+ def id(b: B): B = b
+ id(b)
+ }
+}
diff --git a/test/files/run/t7868.scala b/test/files/run/t7868.scala
new file mode 100644
index 0000000000..1f938adf31
--- /dev/null
+++ b/test/files/run/t7868.scala
@@ -0,0 +1,13 @@
+object A {
+ def unapply(n: Int): Option[Int] = Some(n)
+
+ def run = (0: Short) match {
+ case A(_) =>
+ case _ =>
+ }
+}
+
+
+object Test extends App {
+ A.run
+}
diff --git a/test/files/run/t7868b.check b/test/files/run/t7868b.check
new file mode 100644
index 0000000000..6577c4bc4e
--- /dev/null
+++ b/test/files/run/t7868b.check
@@ -0,0 +1,6 @@
+Expr[Int]({
+ val x = (0: Short): @unchecked match {
+ case A((x @ _)) => x
+ };
+ x
+})
diff --git a/test/files/run/t7868b.scala b/test/files/run/t7868b.scala
new file mode 100644
index 0000000000..759eeaf862
--- /dev/null
+++ b/test/files/run/t7868b.scala
@@ -0,0 +1,11 @@
+object A {
+ def unapply(n: Int): Option[Int] = Some(1)
+}
+
+object Test extends App {
+ import reflect.runtime.universe._
+ println(reify {
+ val A(x) = (0: Short)
+ x
+ })
+}
diff --git a/test/files/run/t7871.check b/test/files/run/t7871.check
new file mode 100644
index 0000000000..ce6efd812d
--- /dev/null
+++ b/test/files/run/t7871.check
@@ -0,0 +1 @@
+(SomeTree,SomeTree)
diff --git a/test/files/run/t7871/Macros_1.scala b/test/files/run/t7871/Macros_1.scala
new file mode 100644
index 0000000000..778068deb3
--- /dev/null
+++ b/test/files/run/t7871/Macros_1.scala
@@ -0,0 +1,27 @@
+import scala.reflect.macros.Context
+import language.experimental.macros
+
+trait Tree
+case object SomeTree extends Tree
+
+object NewQuasiquotes {
+ implicit class QuasiquoteInterpolation(c: StringContext) {
+ object nq {
+ def unapply(t: Tree) = macro QuasiquoteMacros.unapplyImpl
+ }
+ }
+}
+
+object QuasiquoteMacros {
+ def unapplyImpl(c: Context)(t: c.Tree) = {
+ import c.universe._
+ q"""
+ new {
+ def unapply(t: Tree) = t match {
+ case SomeTree => Some((SomeTree, SomeTree))
+ case _ => None
+ }
+ }.unapply($t)
+ """
+ }
+}
diff --git a/test/files/run/t7871/Test_2.scala b/test/files/run/t7871/Test_2.scala
new file mode 100644
index 0000000000..3a0b68b568
--- /dev/null
+++ b/test/files/run/t7871/Test_2.scala
@@ -0,0 +1,6 @@
+object Test extends App {
+ import NewQuasiquotes._
+ SomeTree match {
+ case nq"$x + $y" => println((x, y))
+ }
+}
diff --git a/test/files/run/t7876.scala b/test/files/run/t7876.scala
new file mode 100644
index 0000000000..aeec8c8cce
--- /dev/null
+++ b/test/files/run/t7876.scala
@@ -0,0 +1,26 @@
+import scala.tools.partest._
+
+// Type constructors for FunctionN and TupleN should not be considered as function type / tuple types.
+object Test extends DirectTest {
+ override def extraSettings: String = "-usejavacp"
+
+ def code = ""
+
+ def show() {
+ val global = newCompiler()
+ new global.Run()
+ import global._, definitions._
+ val function0TC = FunctionClass(0).typeConstructor
+ val tuple1TC = TupleClass(1).typeConstructor
+ FunctionClass.seq.foreach { sym =>
+ val tc = sym.typeConstructor
+ assert(!isFunctionType(tc), s"$tc")
+ assert(!isFunctionTypeDirect(tc), s"$tc (direct)")
+ }
+ TupleClass.seq.foreach { sym =>
+ val tc = sym.typeConstructor
+ assert(!isTupleType(tc), s"$sym")
+ assert(!isTupleTypeDirect(tc), s"$tc (direct)")
+ }
+ }
+}
diff --git a/test/files/scalacheck/quasiquotes/TermConstructionProps.scala b/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
index c6cca85c81..753ad1aa59 100644
--- a/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
+++ b/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
@@ -167,4 +167,28 @@ object TermConstructionProps extends QuasiquoteProperties("term construction") {
val x = q"val x: Int = 1"
assertThrows[IllegalArgumentException] { q"($x) => x" }
}
+
+ property("assign variable") = test {
+ val v = q"v"
+ val value = q"foo"
+ assertEqAst(q"$v = $value", "v = foo")
+ }
+
+ property("assign update 1") = test {
+ val v = q"v"
+ val args = q"1" :: q"2" :: Nil
+ val value = q"foo"
+ assertEqAst(q"$v(..$args) = $value", "v(1, 2) = foo")
+ }
+
+ property("assign update 2") = test {
+ val a = q"v(0)"
+ val value = q"foo"
+ assertEqAst(q"$a = $value", "v(0) = foo")
+ }
+
+ property("assign or named arg") = test {
+ val assignx = q"x = 1"
+ assertEqAst(q"f($assignx)", "f(x = 1)")
+ }
}
diff --git a/test/files/scalacheck/quasiquotes/TermDeconstructionProps.scala b/test/files/scalacheck/quasiquotes/TermDeconstructionProps.scala
index 45c7ee4bb7..22d4b1ce4f 100644
--- a/test/files/scalacheck/quasiquotes/TermDeconstructionProps.scala
+++ b/test/files/scalacheck/quasiquotes/TermDeconstructionProps.scala
@@ -91,4 +91,24 @@ object TermDeconstructionProps extends QuasiquoteProperties("term deconstruction
matches("new { val early = 1} with Parent[Int] { body }")
matches("new Foo { selfie => }")
}
+
+ property("exhaustive assign pattern") = test {
+ def matches(tree: Tree) { val q"$rhs = $lhs" = tree }
+ matches(parse("left = right"))
+ matches(parse("arr(1) = 2"))
+ matches(AssignOrNamedArg(EmptyTree, EmptyTree))
+ }
+
+ property("deconstruct update 1") = test {
+ val q"$obj(..$args) = $value" = q"foo(bar) = baz"
+ assert(obj ≈ q"foo")
+ assert(args ≈ List(q"bar"))
+ assert(value ≈ q"baz")
+ }
+
+ property("deconstruct update 2") = test {
+ val q"$left = $value" = q"foo(bar) = baz"
+ assert(left ≈ q"foo(bar)")
+ assert(value ≈ q"baz")
+ }
}
diff --git a/test/pending/t7629-view-bounds-removal.check b/test/pending/t7629-view-bounds-removal.check
new file mode 100644
index 0000000000..dc52105eaf
--- /dev/null
+++ b/test/pending/t7629-view-bounds-removal.check
@@ -0,0 +1,9 @@
+t7629-view-bounds-removal.scala:2: error: View bounds have been removed. Use an implicit parameter instead.
+Example: Instead of `def f[A <% Int](a: A)` use `def f[A](a: A)(implicit ev: A => Int)`.
+ def f[A <% Int](a: A) = null
+ ^
+t7629-view-bounds-removal.scala:3: error: View bounds have been removed. Use an implicit parameter instead.
+Example: Instead of `def f[A <% Int](a: A)` use `def f[A](a: A)(implicit ev: A => Int)`.
+ def g[C, B <: C, A <% B : Numeric](a: A) = null
+ ^
+two errors found
diff --git a/test/pending/t7629-view-bounds-removal.flags b/test/pending/t7629-view-bounds-removal.flags
new file mode 100644
index 0000000000..29f4ede37a
--- /dev/null
+++ b/test/pending/t7629-view-bounds-removal.flags
@@ -0,0 +1 @@
+-Xfuture
diff --git a/test/pending/t7629-view-bounds-removal.scala b/test/pending/t7629-view-bounds-removal.scala
new file mode 100644
index 0000000000..a6ede1fcc3
--- /dev/null
+++ b/test/pending/t7629-view-bounds-removal.scala
@@ -0,0 +1,4 @@
+object Test {
+ def f[A <% Int](a: A) = null
+ def g[C, B <: C, A <% B : Numeric](a: A) = null
+}
diff --git a/test/scaladoc/run/SI-4676.scala b/test/scaladoc/run/SI-4676.scala
index b83a59a472..99b3c5568a 100644
--- a/test/scaladoc/run/SI-4676.scala
+++ b/test/scaladoc/run/SI-4676.scala
@@ -21,6 +21,7 @@ object Test extends ScaladocModelTest {
// check correct expansion of the use case signature
val x = rootPackage._class("SI_4676")._method("x")
- assert(x.valueParams(0)(0).resultType.name == "(String, String)", "parameter ss of method x has type (String, String")
+ val resultType = x.valueParams(0)(0).resultType.name
+ assert(resultType == "SS", s"parameter ss of method x has type $resultType, expected SS!")
}
} \ No newline at end of file
diff --git a/test/scaladoc/run/t7876.check b/test/scaladoc/run/t7876.check
new file mode 100644
index 0000000000..619c56180b
--- /dev/null
+++ b/test/scaladoc/run/t7876.check
@@ -0,0 +1 @@
+Done.
diff --git a/test/scaladoc/run/t7876.scala b/test/scaladoc/run/t7876.scala
new file mode 100644
index 0000000000..63c63f8a0c
--- /dev/null
+++ b/test/scaladoc/run/t7876.scala
@@ -0,0 +1,19 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+
+ override def code = """
+ import language.higherKinds
+ trait T[M[_]]
+ class C extends T[Function0]
+ class D extends T[Tuple1]
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(rootPackage: Package) = {
+ import access._
+ // did not crash
+ }
+}
diff --git a/test/scaladoc/run/t7876b.check b/test/scaladoc/run/t7876b.check
new file mode 100644
index 0000000000..21aaf3b295
--- /dev/null
+++ b/test/scaladoc/run/t7876b.check
@@ -0,0 +1,3 @@
+foo: FInt
+foo: TInt
+Done.
diff --git a/test/scaladoc/run/t7876b.scala b/test/scaladoc/run/t7876b.scala
new file mode 100644
index 0000000000..4d5b8c22cf
--- /dev/null
+++ b/test/scaladoc/run/t7876b.scala
@@ -0,0 +1,24 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+// Don't dealias just to print a Function or Tuple type.
+object Test extends ScaladocModelTest {
+
+ override def code = """
+ class Test {
+ type FInt = Function0[Int]
+ type TInt = Tuple1[Int]
+ def foo: FInt
+ def bar: TInt
+ }
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(rootPackage: Package) = {
+ import access._
+ List("foo", "bar").foreach { name =>
+ println("foo: " + rootPackage._class("Test")._method(name).resultType.name)
+ }
+ }
+}