aboutsummaryrefslogtreecommitdiff
path: root/tests/pos/t7093.scala
blob: 287b7a78c726f0b3752b0e2cb7cbde76820614d8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
object Test {

  trait A[+X] {
    protected[this] def f(x: X): X = x
  }

  trait B extends A[B] {
    def kaboom = f(new B {})
  }

// protected[this] disables variance checking
// of the signature of `f`.
//
// C's parent list unifies A[B] with A[C]
//
// The protected[this] loophole is widely used
// in the collections, every newBuilder method
// would fail variance checking otherwise.
  class C extends B with A[C] {
    override protected[this] def f(c: C) = c
  }

// java.lang.ClassCastException: B$$anon$1 cannot be cast to C
//  at C.f(<console>:15)
  new C().kaboom
}