diff options
Diffstat (limited to 'test/pending/pos')
55 files changed, 341 insertions, 287 deletions
diff --git a/test/pending/pos/exhaust_2.scala b/test/pending/pos/exhaust_2.scala deleted file mode 100644 index 4f4e47c43b..0000000000 --- a/test/pending/pos/exhaust_2.scala +++ /dev/null @@ -1,54 +0,0 @@ -object ExhaustivityWarnBugReportMinimal { - //sealed is needed for the warning - sealed trait FoundNode[T]/*presence of parameters is irrelevant*/ - // This also causes a warning: - // sealed abstract class FoundNode[T]/*presence of parameters is irrelevant*/ - case class FoundFilter[T](/*presence of parameters is irrelevant*/) extends FoundNode[T] - case class FoundTypeCase[T](/*presence of parameters is irrelevant*/) extends FoundNode[T] - val f: Some[_] = ??? - f match { - case x: Some[t] => //no warning - } - //With these variants, no warnings: - //val v: (Some[Int], FoundNode[_]) = (???, ???) - //val v: (Some[AnyRef], FoundNode[_]) = (???, ???) - //val v: (Some[String], FoundNode[_]) = (???, ???) - - val v: (Some[_], FoundNode[_]) = (???, ???) - //Warning here: - v match { - case (x: Some[t], _: FoundNode[_]) => - } - v match { - case (x: Some[t], _) => - } - - v match { - case (x: Some[_], _) => - } - case class Foo[T]() - - val vp: (Foo[_], FoundNode[_]) = (???, ???) - vp match { - case (x: Foo[_], _) => - } - - //No warning here: - v match { - case (Some(y), _) => - } - - v match { - case (x, _) => - } - - val v2: (Some[_], Int) = (???, ???) - v2 match { - case (x: Some[t], _) => - } - - val v3: (Option[_], FoundNode[_]) = (???, ???) - v match { - case (x: Option[_], _) => - } -} diff --git a/test/pending/pos/no-widen-locals.flags b/test/pending/pos/no-widen-locals.flags new file mode 100644 index 0000000000..85d8eb2ba2 --- /dev/null +++ b/test/pending/pos/no-widen-locals.flags @@ -0,0 +1 @@ +-Xfatal-warnings diff --git a/test/pending/pos/overloading-boundaries.scala b/test/pending/pos/overloading-boundaries.scala new file mode 100644 index 0000000000..d2e9fdbb12 --- /dev/null +++ b/test/pending/pos/overloading-boundaries.scala @@ -0,0 +1,37 @@ +package bar { + object bippy extends (Double => String) { + def apply(x: Double): String = "Double" + } +} + +package object bar { + def bippy(x: Int, y: Int, z: Int) = "(Int, Int, Int)" +} + +object Test { + def main(args: Array[String]): Unit = { + println(bar.bippy(5.5d)) + println(bar.bippy(1, 2, 3)) + } +} + +/**** + +% scalac3 a.scala +a.scala:13: error: not enough arguments for method bippy: (x: Int, y: Int, z: Int)String. +Unspecified value parameters y, z. + println(bar.bippy(5.5d)) + ^ +one error found + +# Comment out the call to bar.bippy(5.5d) - compiles +% scalac3 a.scala + +# Compiles only from pure source though - if classes are present, fails. +% scalac3 a.scala +a.scala:2: error: bippy is already defined as method bippy in package object bar + object bippy extends (Double => String) { + ^ +one error found + +****/ diff --git a/test/pending/pos/pattern-typing.scala b/test/pending/pos/pattern-typing.scala new file mode 100644 index 0000000000..7286cc38af --- /dev/null +++ b/test/pending/pos/pattern-typing.scala @@ -0,0 +1,29 @@ +import scala.language.higherKinds + +trait Bound[B] + +package p1 { + case class Sub[B <: Bound[B]](p: B) + object Test { + def g[A](x: Bound[A]) = () + def f(x: Any) = x match { case Sub(p) => g(p) } + } +} + +package p2 { + trait Traversable[+A] { def head: A = ??? } + trait Seq[+A] extends Traversable[A] { def length: Int = ??? } + + case class SubHK[B <: Bound[B], CC[X] <: Traversable[X]](xs: CC[B]) + class MyBound extends Bound[MyBound] + class MySeq extends Seq[MyBound] + + object Test { + def g[B](x: Bound[B]) = () + + def f1(x: Any) = x match { case SubHK(xs) => xs } + def f2[B <: Bound[B], CC[X] <: Traversable[X]](sub: SubHK[B, CC]): CC[B] = sub match { case SubHK(xs) => xs } + def f3 = g(f1(SubHK(new MySeq)).head) + def f4 = g(f2(SubHK(new MySeq)).head) + } +} diff --git a/test/pending/pos/t1751.cmds b/test/pending/pos/t1751.cmds deleted file mode 100644 index d4a4898ffd..0000000000 --- a/test/pending/pos/t1751.cmds +++ /dev/null @@ -1,3 +0,0 @@ -javac SuiteClasses.java -scalac A2_1.scala -scalac A1_2.scala diff --git a/test/pending/pos/t1751/A1_2.scala b/test/pending/pos/t1751/A1_2.scala deleted file mode 100644 index 354d5eecd0..0000000000 --- a/test/pending/pos/t1751/A1_2.scala +++ /dev/null @@ -1,2 +0,0 @@ -@SuiteClasses(Array(classOf[A2])) -class A1 diff --git a/test/pending/pos/t1751/A2_1.scala b/test/pending/pos/t1751/A2_1.scala deleted file mode 100644 index c768062e43..0000000000 --- a/test/pending/pos/t1751/A2_1.scala +++ /dev/null @@ -1,2 +0,0 @@ -@SuiteClasses(Array()) -class A2 diff --git a/test/pending/pos/t1751/SuiteClasses.java b/test/pending/pos/t1751/SuiteClasses.java deleted file mode 100644 index a415e4f572..0000000000 --- a/test/pending/pos/t1751/SuiteClasses.java +++ /dev/null @@ -1,3 +0,0 @@ -public @interface SuiteClasses { - public Class<?>[] value(); -} diff --git a/test/pending/pos/t1782.cmds b/test/pending/pos/t1782.cmds deleted file mode 100644 index 61f3d3788e..0000000000 --- a/test/pending/pos/t1782.cmds +++ /dev/null @@ -1,2 +0,0 @@ -javac Ann.java Days.java ImplementedBy.java -scalac Test_1.scala diff --git a/test/pending/pos/t1782/Ann.java b/test/pending/pos/t1782/Ann.java deleted file mode 100644 index 0dcfbd2ed7..0000000000 --- a/test/pending/pos/t1782/Ann.java +++ /dev/null @@ -1,3 +0,0 @@ -public @interface Ann { - public Days value(); -} diff --git a/test/pending/pos/t1782/Days.java b/test/pending/pos/t1782/Days.java deleted file mode 100644 index 203a87b1c2..0000000000 --- a/test/pending/pos/t1782/Days.java +++ /dev/null @@ -1,3 +0,0 @@ -public enum Days { - Friday, Sunday -} diff --git a/test/pending/pos/t1782/ImplementedBy.java b/test/pending/pos/t1782/ImplementedBy.java deleted file mode 100644 index 6aa8b4fa9e..0000000000 --- a/test/pending/pos/t1782/ImplementedBy.java +++ /dev/null @@ -1,3 +0,0 @@ -public @interface ImplementedBy { - public Class<?> value(); -} diff --git a/test/pending/pos/t1782/Test_1.scala b/test/pending/pos/t1782/Test_1.scala deleted file mode 100644 index 6467a74c29..0000000000 --- a/test/pending/pos/t1782/Test_1.scala +++ /dev/null @@ -1,16 +0,0 @@ -@ImplementedBy(classOf[Provider]) -trait Service { - def someMethod() -} - -class Provider - extends Service -{ - // test enumeration java annotations - @Ann(Days.Friday) def someMethod() = () - - // #2103 - @scala.beans.BeanProperty - @Ann(value = Days.Sunday) - val t2103 = "test" -} diff --git a/test/pending/pos/t1786.scala b/test/pending/pos/t1786.scala index dca2edaab4..6299eb9eae 100644 --- a/test/pending/pos/t1786.scala +++ b/test/pending/pos/t1786.scala @@ -1,20 +1,27 @@ -/** This a consequence of the current type checking algorithm, where bounds - * are checked only after variables are instantiated. I believe this will change once we go to contraint-based type inference. Assigning low priority until then. - * +/** This a consequence of the current type checking algorithm, where bounds are checked only after variables are instantiated. + * I believe this will change once we go to contraint-based type inference. + * Alternatively, we can pursue a more extensive fix to SI-6169 * - */ + * The below code shows a compiler flaw in that the wildcard "_" as value for a bounded type parameter either + * breaks the boundary - as it result in Any - or doesn't evaluate to the boundary (as I'd hoped it to be). +*/ + class SomeClass(val intValue:Int) -class MyClass[T <: SomeClass](val myValue:T) +class MyClass[T <: SomeClass](val myValue:T) +class Flooz[A >: Null <: SomeClass, T >: Null <: A](var value: T) -object Test extends Application { - def myMethod(i:MyClass[_]) { - i.myValue.intValue/2 // << error i is of type Any - } +class A { + def f1(i:MyClass[_]) = i.myValue.intValue + def f2(i:MyClass[_ <: SomeClass]) = i.myValue.intValue + // def f3[T](i: MyClass[T]) = i.myValue.intValue + def f4[T <: SomeClass](i: MyClass[T]) = i.myValue.intValue + // def f5[T >: Null](i: MyClass[T]) = i.myValue.intValue + // def f6[T >: Null <: String](i: MyClass[T]) = i.myValue.intValue + i.myValue.charAt(0) - def myMethod(i:MyClass[_ <: SomeClass]) { - i.myValue.intValue/2 // << works - } + // def g1[A, T](x: Flooz[A, T]) = { x.value = null ; x.value.intValue } + def g2(x: Flooz[_, _]) = { x.value = null ; x.value.intValue } + + class MyClass2(x: MyClass[_]) { val p = x.myValue.intValue } + // class MyClass3[T <: String](x: MyClass[T]) { val p = x.myValue.intValue + x.myValue.length } + // class MyClass4[T >: Null](x: MyClass[T]) { val p = x.myValue.intValue } } -/* -The below code shows a compiler flaw in that the wildcard "_" as value for a bounded type parameter either breaks the boundry - as it result in Any - or doesnt (as id hoped it to be) evaluates to the boundy. -*/ diff --git a/test/pending/pos/t1832.scala b/test/pending/pos/t1832.scala deleted file mode 100644 index bca863f4bd..0000000000 --- a/test/pending/pos/t1832.scala +++ /dev/null @@ -1,10 +0,0 @@ -// Edit by paulp: reduced. -trait Cloning { - trait Foo - def fn(g: Int => Unit): Foo - - implicit def mkStar(i: Int) = new { def *(a: Foo): Foo = null } - - val pool1 = 4 * fn { case i => i * 2 } - val pool2 = 4 * fn { case i: Int => i * 2 } -} diff --git a/test/pending/pos/t294.cmds b/test/pending/pos/t294.cmds deleted file mode 100644 index 62c9a5a068..0000000000 --- a/test/pending/pos/t294.cmds +++ /dev/null @@ -1,3 +0,0 @@ -javac Ann.java Ann2.java -scalac Test_1.scala -scalac Test_2.scala diff --git a/test/pending/pos/t294/Ann.java b/test/pending/pos/t294/Ann.java deleted file mode 100644 index 934ca46297..0000000000 --- a/test/pending/pos/t294/Ann.java +++ /dev/null @@ -1,3 +0,0 @@ -public @interface Ann { - public Ann2[] nested(); -} diff --git a/test/pending/pos/t294/Ann2.java b/test/pending/pos/t294/Ann2.java deleted file mode 100644 index 025b79e794..0000000000 --- a/test/pending/pos/t294/Ann2.java +++ /dev/null @@ -1,3 +0,0 @@ -public @interface Ann2 { - public int value(); -} diff --git a/test/pending/pos/t294/Test_1.scala b/test/pending/pos/t294/Test_1.scala deleted file mode 100644 index ff1f34b10e..0000000000 --- a/test/pending/pos/t294/Test_1.scala +++ /dev/null @@ -1,7 +0,0 @@ -// also test pickling of java annotations; Test_2.scala will -// read this class file -@Ann(nested = Array(new Ann2(10))) class Test { - @Ann2(100) var ctx: Object = _ - @Ann(nested = Array()) def foo = 10 - @Ann(nested = Array(new Ann2(10), new Ann2(23))) val bam = -3 -} diff --git a/test/pending/pos/t294/Test_2.scala b/test/pending/pos/t294/Test_2.scala deleted file mode 100644 index 9fb1c6e175..0000000000 --- a/test/pending/pos/t294/Test_2.scala +++ /dev/null @@ -1 +0,0 @@ -class Test2 extends Test diff --git a/test/pending/pos/t4612.scala b/test/pending/pos/t4612.scala new file mode 100644 index 0000000000..a93c12ef01 --- /dev/null +++ b/test/pending/pos/t4612.scala @@ -0,0 +1,15 @@ +class CyclicReferenceCompilerBug { + trait Trait[A] { + def foo: A + } + + class Class extends Trait[Class] { + def foo = new Class + + trait OtherTrait extends Trait[OtherTrait] { + self: Class => + + def foo = new Class + } + } +} diff --git a/test/pending/pos/t4649.flags b/test/pending/pos/t4649.flags deleted file mode 100644 index e8fb65d50c..0000000000 --- a/test/pending/pos/t4649.flags +++ /dev/null @@ -1 +0,0 @@ --Xfatal-warnings
\ No newline at end of file diff --git a/test/pending/pos/t4649.scala b/test/pending/pos/t4649.scala deleted file mode 100644 index 0d6caa8d7a..0000000000 --- a/test/pending/pos/t4649.scala +++ /dev/null @@ -1,6 +0,0 @@ -object Test { - // @annotation.tailrec - def lazyFilter[E](s: Stream[E], p: E => Boolean): Stream[E] = s match { - case h #:: t => if (p(h)) h #:: lazyFilter(t, p) else lazyFilter(t, p) - } -} diff --git a/test/pending/pos/t4695/T_1.scala b/test/pending/pos/t4695/T_1.scala new file mode 100644 index 0000000000..70fb1a7f21 --- /dev/null +++ b/test/pending/pos/t4695/T_1.scala @@ -0,0 +1,4 @@ +package foo + +class Bar { } +package object Bar { } diff --git a/test/pending/pos/t4695/T_2.scala b/test/pending/pos/t4695/T_2.scala new file mode 100644 index 0000000000..70fb1a7f21 --- /dev/null +++ b/test/pending/pos/t4695/T_2.scala @@ -0,0 +1,4 @@ +package foo + +class Bar { } +package object Bar { } diff --git a/test/pending/pos/t4717.scala b/test/pending/pos/t4717.scala deleted file mode 100644 index 7eaa3dd487..0000000000 --- a/test/pending/pos/t4717.scala +++ /dev/null @@ -1,7 +0,0 @@ -trait Bounds[@specialized A] { - // okay without `>: A` - def x[B >: A]: Unit = new Bounds[B] { - lazy val it = ??? // def or val okay - it - } -}
\ No newline at end of file diff --git a/test/pending/pos/t4786.scala b/test/pending/pos/t4786.scala deleted file mode 100644 index f0579142b8..0000000000 --- a/test/pending/pos/t4786.scala +++ /dev/null @@ -1,24 +0,0 @@ -trait Matrix[@specialized A, Repr[C] <: Matrix[C, Repr]] { // crash goes away if @specialize is removed - def duplicate(mb: MatrixBuilder[A, Repr]): Repr[A] = { - mb.zeros - } -} -trait DenseMatrix[@specialized A] extends Matrix[A, DenseMatrix] -trait DenseMatrixFlt extends DenseMatrix[Float] - -trait MatrixBuilder[@specialized A, Repr[C] <: Matrix[C, Repr]] { - def zeros: Repr[A] -} -object DenseFloatBuilder extends MatrixBuilder[Float, DenseMatrix] { - val zeros = new Object with DenseMatrixFlt - // Note: - // - in 2.9 crash goes away if the explicit type "DenseMatrixFlt" is assigned to "zeros" - // - in 2.9 crash goes away if DenseMatrixFlt is a class instead of a trait: - // val zeros = new DenseMatrixFlt -} - -object Test extends App { - val m1 = DenseFloatBuilder.zeros // in 2.9 crash goes away if explicit type "DenseMatrixFlt" is assigned to m1 - val m2 = m1.duplicate(DenseFloatBuilder) -} - diff --git a/test/pending/pos/t4859.scala b/test/pending/pos/t4859.scala deleted file mode 100644 index ec5abd966d..0000000000 --- a/test/pending/pos/t4859.scala +++ /dev/null @@ -1,15 +0,0 @@ -object O { - C().CC() - D().DD() -} - -case class C() { - case class CC() -} - -case class D() { - class DD() - object DD { - def apply() = new DD() - } -} diff --git a/test/pending/pos/t5082.scala b/test/pending/pos/t5082.scala new file mode 100644 index 0000000000..20a6cfc55f --- /dev/null +++ b/test/pending/pos/t5082.scala @@ -0,0 +1,8 @@ +object Test { + sealed trait A + case object A1 extends A +} + +trait Something[T] + +case class Test() extends Something[Test.A] diff --git a/test/pending/pos/t5259.scala b/test/pending/pos/t5259.scala deleted file mode 100644 index 317e28a9dc..0000000000 --- a/test/pending/pos/t5259.scala +++ /dev/null @@ -1,14 +0,0 @@ -object DefaultArgBogusTypeMismatch { - - class A[T] - class B { - type T = this.type - def m(implicit a : A[T] = new A[T]) = a - } - - def newB = new B - val a1 = newB.m // Bogus type mismatch - - val stableB = new B - val a2 = stableB.m // OK -} diff --git a/test/pending/pos/t5399.scala b/test/pending/pos/t5399.scala deleted file mode 100644 index 89caba39c1..0000000000 --- a/test/pending/pos/t5399.scala +++ /dev/null @@ -1,8 +0,0 @@ -class Test { - class A[T] - class B[T](val a: A[T]) - - case class CaseClass[T](x: T) - - def break(existB: B[_]) = CaseClass(existB.a) match { case CaseClass(_) => } -} diff --git a/test/pending/pos/t5399a.scala b/test/pending/pos/t5399a.scala deleted file mode 100644 index 4ebd85ad03..0000000000 --- a/test/pending/pos/t5399a.scala +++ /dev/null @@ -1,19 +0,0 @@ -class Foo { - trait Init[T] - class ScopedKey[T] extends Init[T] - - trait Setting[T] { - val key: ScopedKey[T] - } - - case class ScopedKey1[T](val foo: Init[T]) extends ScopedKey[T] - - val scalaHome: Setting[Option[String]] = null - val scalaVersion: Setting[String] = null - - def testPatternMatch(s: Setting[_]) { - s.key match { - case ScopedKey1(scalaHome.key | scalaVersion.key) => () - } - } -} diff --git a/test/pending/pos/t5459.scala b/test/pending/pos/t5459.scala new file mode 100644 index 0000000000..971e6f896d --- /dev/null +++ b/test/pending/pos/t5459.scala @@ -0,0 +1,48 @@ +trait A1 +trait A2 +trait A3 +trait L1 extends A1 with A2 with A3 + +object Test { + trait T1[-A <: A1] + trait T2[-A >: L1] + trait T3[ A <: A1] + trait T4[ A >: L1] + trait T5[+A <: A1] + trait T6[+A >: L1] + + def f1(x: T1[_]) = x + def f2(x: T2[_]) = x + def f3(x: T3[_]) = x + def f4(x: T4[_]) = x + def f5(x: T5[_]) = x + def f6(x: T6[_]) = x + // a.scala:22: error: type arguments [Any] do not conform to trait T5's type parameter bounds [+A <: A1] + // def f5(x: T5[_]) = x + // ^ + + def g1(x: T1[_ <: A1]) = x + def g2(x: T2[_ >: L1]) = x + def g3(x: T3[_ <: A1]) = x + def g4(x: T4[_ >: L1]) = x + def g5(x: T5[_ <: A1]) = x + def g6(x: T6[_ >: L1]) = x + + def q1(x: T1[_ >: L1]) = x + def q2(x: T2[_ <: A1]) = x + def q3(x: T3[_ >: L1]) = x + def q4(x: T4[_ <: A1]) = x + def q5(x: T5[_ >: L1]) = x + def q6(x: T6[_ <: A1]) = x + // a.scala:41: error: type arguments [Any] do not conform to trait T5's type parameter bounds [+A <: A1] + // def q5(x: T5[_ >: L1]) = x + // ^ + // two errors found + + def h1(x: T1[_ >: L1 <: A1]) = x + def h2(x: T2[_ >: L1 <: A1]) = x + def h3(x: T3[_ >: L1 <: A1]) = x + def h4(x: T4[_ >: L1 <: A1]) = x + def h5(x: T5[_ >: L1 <: A1]) = x + def h6(x: T6[_ >: L1 <: A1]) = x +} diff --git a/test/pending/pos/t5606.scala b/test/pending/pos/t5606.scala deleted file mode 100644 index 2545271e32..0000000000 --- a/test/pending/pos/t5606.scala +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - -case class CaseTest[_](someData:String) diff --git a/test/pending/pos/t5626.scala b/test/pending/pos/t5626.scala deleted file mode 100644 index 7ab3881827..0000000000 --- a/test/pending/pos/t5626.scala +++ /dev/null @@ -1,12 +0,0 @@ -object Test { - val blob0 = new { - case class Foo(i : Int) - } - val foo0 = blob0.Foo(22) - - val blob1 = new { - class Foo(i: Int) - object Foo { def apply(i: Int): Foo = new Foo(i) } - } - val foo1 = blob1.Foo(22) -} diff --git a/test/pending/pos/t5639/Bar.scala b/test/pending/pos/t5639/Bar.scala deleted file mode 100644 index f577500acd..0000000000 --- a/test/pending/pos/t5639/Bar.scala +++ /dev/null @@ -1,7 +0,0 @@ -package pack.age - -import pack.age.Implicits._ - -object Quux { - def baz : Baz = 1 -} diff --git a/test/pending/pos/t5639/Foo.scala b/test/pending/pos/t5639/Foo.scala deleted file mode 100644 index 6602150661..0000000000 --- a/test/pending/pos/t5639/Foo.scala +++ /dev/null @@ -1,7 +0,0 @@ -package pack.age - -class Baz - -object Implicits { - implicit def Baz(n: Int): Baz = new Baz -} diff --git a/test/pending/pos/t5654.scala b/test/pending/pos/t5654.scala deleted file mode 100644 index eb711a5f37..0000000000 --- a/test/pending/pos/t5654.scala +++ /dev/null @@ -1,4 +0,0 @@ -case class Bomb(a: Array[_]) -case class Bomb2(a: Array[T] forSome { type T }) -class Okay1(a: Array[_]) -case class Okay2(s: Seq[_])
\ No newline at end of file diff --git a/test/pending/pos/t5877.scala b/test/pending/pos/t5877.scala new file mode 100644 index 0000000000..b77605f7f2 --- /dev/null +++ b/test/pending/pos/t5877.scala @@ -0,0 +1,5 @@ +package foo { } + +package object foo { + implicit class Foo(val s: String) { } +} diff --git a/test/pending/pos/t5954/T_1.scala b/test/pending/pos/t5954/T_1.scala new file mode 100644 index 0000000000..0064c596b6 --- /dev/null +++ b/test/pending/pos/t5954/T_1.scala @@ -0,0 +1,8 @@ +package p { + package base { + class X + } + package object base { + case class B() + } +} diff --git a/test/pending/pos/t5954/T_2.scala b/test/pending/pos/t5954/T_2.scala new file mode 100644 index 0000000000..0064c596b6 --- /dev/null +++ b/test/pending/pos/t5954/T_2.scala @@ -0,0 +1,8 @@ +package p { + package base { + class X + } + package object base { + case class B() + } +} diff --git a/test/pending/pos/t5954/T_3.scala b/test/pending/pos/t5954/T_3.scala new file mode 100644 index 0000000000..0064c596b6 --- /dev/null +++ b/test/pending/pos/t5954/T_3.scala @@ -0,0 +1,8 @@ +package p { + package base { + class X + } + package object base { + case class B() + } +} diff --git a/test/pending/pos/t6161.scala b/test/pending/pos/t6161.scala new file mode 100644 index 0000000000..5783cc85f2 --- /dev/null +++ b/test/pending/pos/t6161.scala @@ -0,0 +1,22 @@ +object t6161 { + trait N { + type Name + } + + trait N1 extends N { + class Name { + type ThisNameType <: Name + def encode: ThisNameType = ??? + } + } + + trait S { + self: N => // change to N1 and it compiles + type NameType <: Name + } + + object g extends S with N1 + + val n1: g.NameType = ??? + val n2: g.Name = n1.encode +} diff --git a/test/pending/pos/t6225.scala b/test/pending/pos/t6225.scala new file mode 100644 index 0000000000..d7dff3c419 --- /dev/null +++ b/test/pending/pos/t6225.scala @@ -0,0 +1,11 @@ +package library.x { + class X { + class Foo + implicit val foo = new Foo + } +} +package library { package object x extends X } +package app { + import library.x._ + object App { implicitly[Foo] } +} diff --git a/test/pending/pos/t8128b.scala b/test/pending/pos/t8128b.scala new file mode 100644 index 0000000000..dd44a25a90 --- /dev/null +++ b/test/pending/pos/t8128b.scala @@ -0,0 +1,18 @@ +class Optiony[X] { def isEmpty = true; def get: X = ??? } +class Seqy[X] { def head: X = ???; def length = 0; def apply(i: Int): X = ??? } + +object G { + def unapply(m: Any): Optiony[_] = ??? +} + +object H { + def unapplySeq(m: Any): Optiony[Seqy[_]] = ??? +} + +object Test { + (0: Any) match { + case G(v) => v + case H(v) => v + case _ => + } +} diff --git a/test/pending/pos/t8363b.scala b/test/pending/pos/t8363b.scala new file mode 100644 index 0000000000..393e2a0237 --- /dev/null +++ b/test/pending/pos/t8363b.scala @@ -0,0 +1,7 @@ +class C(a: Any) +class Test { + def foo: Any = { + def form = 0 + class C1 extends C({def x = form; ()}) + } +} diff --git a/test/pending/pos/those-kinds-are-high.scala b/test/pending/pos/those-kinds-are-high.scala index 434e64cefb..78367cb746 100644 --- a/test/pending/pos/those-kinds-are-high.scala +++ b/test/pending/pos/those-kinds-are-high.scala @@ -4,18 +4,18 @@ class A { class C1[T] extends Template[C1] with Container[T] class C2[T] extends Template[C2] with Container[T] - + /** Target expression: * List(new C1[String], new C2[String]) */ - + // Here's what would ideally be inferred. // // scala> :type List[Template[Container] with Container[String]](new C1[String], new C2[String]) // List[Template[Container] with Container[java.lang.String]] // // Here's what it does infer. - // + // // scala> :type List(new C1[String], new C2[String]) // <console>:8: error: type mismatch; // found : C1[String] @@ -43,11 +43,54 @@ class A { // def fFail = List(new C1[String], new C2[String]) // ^ // two errors found - + /** Working version explicitly typed. */ def fExplicit = List[Template[Container] with Container[String]](new C1[String], new C2[String]) - + // nope def fFail = List(new C1[String], new C2[String]) } + + +trait Other { + trait GenBar[+A] + trait Bar[+A] extends GenBar[A] + trait Templ[+A, +CC[X] <: GenBar[X]] + + abstract class CC1[+A] extends Templ[A, CC1] with Bar[A] + abstract class CC2[+A] extends Templ[A, CC2] with Bar[A] + + // Compiles + class A1 { + abstract class BarFactory[CC[X] <: Bar[X]] + + def f(x: Boolean) = if (x) (null: BarFactory[CC1]) else (null: BarFactory[CC2]) + } + + // Fails - only difference is CC covariant. + class A2 { + abstract class BarFactory[+CC[X] <: Bar[X]] + + def f(x: Boolean) = if (x) (null: BarFactory[CC1]) else (null: BarFactory[CC2]) + // c.scala:23: error: kinds of the type arguments (Bar with Templ[Any,Bar]) do not conform to the expected kinds of the type parameters (type CC) in class BarFactory. + // Bar with Templ[Any,Bar]'s type parameters do not match type CC's expected parameters: + // <empty> has no type parameters, but type CC has one + // def f(x: Boolean) = if (x) (null: BarFactory[CC1]) else (null: BarFactory[CC2]) + // ^ + // one error found + } + + // Compiles - CC contravariant. + class A3 { + abstract class BarFactory[-CC[X] <: Bar[X]] // with Templ[X, CC]] + + def f(x: Boolean) = if (x) (null: BarFactory[CC1]) else (null: BarFactory[CC2]) + // c.scala:23: error: kinds of the type arguments (Bar with Templ[Any,Bar]) do not conform to the expected kinds of the type parameters (type CC) in class BarFactory. + // Bar with Templ[Any,Bar]'s type parameters do not match type CC's expected parameters: + // <empty> has no type parameters, but type CC has one + // def f(x: Boolean) = if (x) (null: BarFactory[CC1]) else (null: BarFactory[CC2]) + // ^ + // one error found + } +} diff --git a/test/pending/pos/treecheckers.flags b/test/pending/pos/treecheckers.flags new file mode 100644 index 0000000000..5319681590 --- /dev/null +++ b/test/pending/pos/treecheckers.flags @@ -0,0 +1 @@ +-Ycheck:all
\ No newline at end of file diff --git a/test/pending/pos/treecheckers/c1.scala b/test/pending/pos/treecheckers/c1.scala new file mode 100644 index 0000000000..b936839039 --- /dev/null +++ b/test/pending/pos/treecheckers/c1.scala @@ -0,0 +1,12 @@ +object Test1 { + def f[T](xs: Array[T]): Array[T] = xs match { case xs => xs } + // [check: patmat] The symbol, tpe or info of tree `(x) : Array[T]` refers to a out-of-scope symbol, type T. tree.symbol.ownerChain: value x + // [check: patmat] The symbol, tpe or info of tree `(x) : Array[T]` refers to a out-of-scope symbol, type T. tree.symbol.ownerChain: value x + + def g[T](xs: Array[T]): Array[T] = { + val x1: Array[T] = xs + def case4() = matchEnd3(x1) + def matchEnd3(x: Array[T]) = x + case4() + } +} diff --git a/test/pending/pos/treecheckers/c2.scala b/test/pending/pos/treecheckers/c2.scala new file mode 100644 index 0000000000..c893a5c922 --- /dev/null +++ b/test/pending/pos/treecheckers/c2.scala @@ -0,0 +1 @@ +class Test2(val valueVal: Int) extends AnyVal diff --git a/test/pending/pos/treecheckers/c3.scala b/test/pending/pos/treecheckers/c3.scala new file mode 100644 index 0000000000..e480bbfb08 --- /dev/null +++ b/test/pending/pos/treecheckers/c3.scala @@ -0,0 +1,8 @@ +import scala.collection.mutable.ArrayOps + +object Test3 { + implicit def genericArrayOps[T](xs: Array[T]): ArrayOps[T] = (xs match { + case x: Array[AnyRef] => refArrayOps[AnyRef](x) + case x: Array[Boolean] => booleanArrayOps(x) + }).asInstanceOf[ArrayOps[T]] +} diff --git a/test/pending/pos/treecheckers/c4.scala b/test/pending/pos/treecheckers/c4.scala new file mode 100644 index 0000000000..2328131770 --- /dev/null +++ b/test/pending/pos/treecheckers/c4.scala @@ -0,0 +1,9 @@ +sealed trait Message[+A] +class Script[A] extends Message[A] { + def iterator: Iterator[Message[A]] = ??? +} + +trait Test4[A] { + def f(cmd: Message[A]): Iterator[A] = cmd match { case s: Script[t] => s.iterator flatMap f } + def g(cmd: Message[A]) = cmd match { case s: Script[t] => s } +} diff --git a/test/pending/pos/treecheckers/c5.scala b/test/pending/pos/treecheckers/c5.scala new file mode 100644 index 0000000000..43cbb65d74 --- /dev/null +++ b/test/pending/pos/treecheckers/c5.scala @@ -0,0 +1,3 @@ +trait Factory[CC[X] <: Traversable[X]] + +object Test5 extends Factory[Traversable] diff --git a/test/pending/pos/treecheckers/c6.scala b/test/pending/pos/treecheckers/c6.scala new file mode 100644 index 0000000000..8283655f3a --- /dev/null +++ b/test/pending/pos/treecheckers/c6.scala @@ -0,0 +1,4 @@ +object Test6 { + import scala.reflect.ClassTag + def f[T: ClassTag] = implicitly[ClassTag[T]].runtimeClass match { case x => x } +} diff --git a/test/pending/pos/z1720.scala b/test/pending/pos/z1720.scala deleted file mode 100644 index 6050f3ff88..0000000000 --- a/test/pending/pos/z1720.scala +++ /dev/null @@ -1,16 +0,0 @@ -package test - -class Thing { - def info: Info[this.type] = InfoRepository.getInfo(this) - def info2: Info[this.type] = { - def self: this.type = this - InfoRepository.getInfo(self) - } -} - -trait Info[T] -case class InfoImpl[T](thing: T) extends Info[T] - -object InfoRepository { - def getInfo(t: Thing): Info[t.type] = InfoImpl(t) -}
\ No newline at end of file |