diff options
author | Martin Odersky <odersky@gmail.com> | 2016-08-24 12:38:22 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-08-26 11:13:17 +0200 |
commit | b41cff6fa4ccc593916790364424051d9eef200d (patch) | |
tree | d2a729c5f885873d725f22f6d4cfe0786836ea59 /tests/neg/t7239.scala | |
parent | eb529b556f92a5ab0329899762b43eea7103ad59 (diff) | |
download | dotty-b41cff6fa4ccc593916790364424051d9eef200d.tar.gz dotty-b41cff6fa4ccc593916790364424051d9eef200d.tar.bz2 dotty-b41cff6fa4ccc593916790364424051d9eef200d.zip |
Test recategorization
Diffstat (limited to 'tests/neg/t7239.scala')
-rw-r--r-- | tests/neg/t7239.scala | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/neg/t7239.scala b/tests/neg/t7239.scala new file mode 100644 index 000000000..f3a379b4e --- /dev/null +++ b/tests/neg/t7239.scala @@ -0,0 +1,40 @@ +// Dotty rewrites only withFilter calls occurring in for expressions to filter calls. +// So this test does not compile. +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) // error + BrokenMethod().filter(_ => true) // ok + + locally { + import addWithFilter._ + BrokenMethod().withFilter((_: (Int, String)) => true) // error + } + + 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) // error + } +} |