diff options
author | Paul Phillips <paulp@improving.org> | 2012-02-11 13:16:06 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-02-11 23:05:22 -0800 |
commit | 7a6fa80937dec6c60efe53c915dfa3ba76b3af87 (patch) | |
tree | 76fbd019dfcb0caf284ba8f95bc2dfe962896506 /test/files/neg/t935.check | |
parent | c478eb770ddf27de64d55426f0fdd3fd81d11f22 (diff) | |
download | scala-7a6fa80937dec6c60efe53c915dfa3ba76b3af87.tar.gz scala-7a6fa80937dec6c60efe53c915dfa3ba76b3af87.tar.bz2 scala-7a6fa80937dec6c60efe53c915dfa3ba76b3af87.zip |
Another existential problem down.
There is a window of danger when multiple related elements are
being typed where something which is conceptually one thing can
slip into two things, and those two things can be incompatible
with one another. Less mysteriously, c478eb770d fixed this:
def f = { object Bob ; Bob } ; val g = f
But, it did not fix this:
def f = { case class Bob() ; Bob } ; val g = f
See test case pos/existentials-harmful.scala for an "in the wild"
code example fixed by this commit.
The root of the problem was that the getter and the field would each
independently derive the same existential type to describe Bob, but
those existentials were not the same as one another.
This has been the most elusive bug I have ever fixed. I want to cry when
I think of how much time I've put into it over the past half decade or
so. Unfortunately the way the repl works it is particularly good at
eliciting those grotesque found/required error messages and so I was
never able to let the thing go.
There is still a cosmetic issue (from the last commit really) where
compound types wind up with repeated parents.
Closes SI-1195, SI-1201.
Diffstat (limited to 'test/files/neg/t935.check')
-rw-r--r-- | test/files/neg/t935.check | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/test/files/neg/t935.check b/test/files/neg/t935.check index af634a2630..8b73700187 100644 --- a/test/files/neg/t935.check +++ b/test/files/neg/t935.check @@ -4,4 +4,7 @@ t935.scala:7: error: type arguments [Test3.B] do not conform to class E's type p t935.scala:13: error: type arguments [Test4.B] do not conform to class E's type parameter bounds [T <: String] val b: String @E[B](new B) = "hi" ^ -two errors found +t935.scala:13: error: type arguments [Test4.B] do not conform to class E's type parameter bounds [T <: String] + val b: String @E[B](new B) = "hi" + ^ +three errors found |