From b41cff6fa4ccc593916790364424051d9eef200d Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Wed, 24 Aug 2016 12:38:22 +0200 Subject: Test recategorization --- tests/neg/t7239.scala | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/neg/t7239.scala (limited to 'tests/neg/t7239.scala') 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 ` => 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 + } +} -- cgit v1.2.3