scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
232 stars 21 forks source link

In-place silent type checking, adaptToMemberWithArgs, filter/withFilter => "erroneous or inaccessible type" #7239

Closed scabug closed 11 years ago

scabug commented 11 years ago
object Test {
  def BrokenMethod(): HasFilter[(Int, String)] = ???

  trait HasFilter[B] {
    def filter(p: B => Boolean) = ???
  }

  trait HasWithFilter {
    def withFilter = ???
  }

  object addWithFilter {
    trait NoImplicit
    implicit def enrich(v: Any)
                       (implicit F0: NoImplicit): HasWithFilter = ???
  }

  BrokenMethod().withFilter(_ => true) // okay
  BrokenMethod().filter(_ => true)     // okay

  locally {
    import addWithFilter._
    BrokenMethod().withFilter((_: (Int, String)) => true) // okay
  }

  locally {
    import addWithFilter._
    // adaptToMemberWithArgs sets the type of the tree `x`
    // to ErrorType (while in silent mode, so the error is not
    // reported. Later, when the fallback from `withFilter`
    // to `filter` is attempted, the closure is taken to have
    // have the type `<error> => Boolean`, which conforms to
    // `(B => Boolean)`. Only later during pickling does the
    // defensive check for erroneous types in the tree pick up
    // the problem.
    BrokenMethod().withFilter(x => true) // erroneous or inaccessible type.
  }
}

This shares a root cause with #7223.

Contrary to my expectation, this code compiles under Scala 2.9.2.

scabug commented 11 years ago

Imported From: https://issues.scala-lang.org/browse/SI-7239?orig=1 Reporter: @retronym Affected Versions: 2.10.0 See #7176, #6921

scabug commented 11 years ago

@retronym said: WIP:

https://github.com/retronym/scala/compare/ticket/7239 https://scala-webapps.epfl.ch/jenkins/job/scala-checkin-manual/857/console

scabug commented 11 years ago

@retronym said: https://github.com/scala/scala/pull/2253