From 0480cb2a5902b733145f54fdc238aba7b831396b Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sun, 31 Jan 2016 17:04:02 +0100 Subject: Only final lazy vals can be paths. Reason: They might be overridden by other lazy vals that are not realizable, and therefore risk creating bad bounds. --- tests/neg/i1050a.scala | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/neg/i1050a.scala (limited to 'tests/neg/i1050a.scala') diff --git a/tests/neg/i1050a.scala b/tests/neg/i1050a.scala new file mode 100644 index 000000000..47e2f0c59 --- /dev/null +++ b/tests/neg/i1050a.scala @@ -0,0 +1,29 @@ +object Tiark1 { + trait A { type L <: Nothing } + trait B { type L >: Any} + trait U { + val p: B + def brand(x: Any): p.L = x // error: not final + } + trait V extends U { + lazy val p: A & B = ??? + } + val v = new V {} + v.brand("boom!") +} +object Tiark2 { + trait A { type L <: Nothing } + trait B { type L >: Any} + trait U { + type X <: B + val p: X + def brand(x: Any): p.L = x // error: not final + } + trait V extends U { + type X = B & A + lazy val p: X = ??? + } + val v = new V {} + v.brand("boom!"): Nothing +} + -- cgit v1.2.3