abstract class Bar[+B] {
}
abstract class C1[+B] extends Bar[B] {  
  private[this] def g(x: C1[B]): Unit = ()

  // this method is fine: notice that it allows the call to g,
  // which requires C1[B], even though we matched on C1[_].
  // (That is good news.)
  private[this] def f1(x: Bar[B]): Unit = x match {
    case x: C1[_] => g(x)
  }
  // this one crashes.
  private[this] def f2(x: Bar[B]): Unit = x match {
    case x: C1[_] => f2(x)
  }
}