diff options
author | Martin Odersky <odersky@gmail.com> | 2012-01-04 07:05:19 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2012-01-04 07:05:19 +0100 |
commit | fafbffc2950aa3f25f91575786093e044f9af549 (patch) | |
tree | a3ebfdd4cc67b4e4b7f4299cdc872e5b1210599a /test/files/neg/t3631.scala | |
parent | 471a63a9e6618f25feb3a5266c38ad98ea2a5ac7 (diff) | |
download | scala-fafbffc2950aa3f25f91575786093e044f9af549.tar.gz scala-fafbffc2950aa3f25f91575786093e044f9af549.tar.bz2 scala-fafbffc2950aa3f25f91575786093e044f9af549.zip |
Closes SI-5354.
The reason why the test case compiled without error is pretty devious: When checking the `Foo.x' implicit, a CyclicReference error occurs which causes the alternative to be discarded. Why a CylicReference? Because the inferencer tries to decide whether the owner of `z` is a subclass of the owner od `x`. To do this, it computed the info of the owner of `z1`, which is not complete because no result type for `f1` was given. Hence a CyclicReference error.
The fix is twofold: (1) We make isNonBottomSubClass smarter so that it always returns false if the symbol in question is not a type; hence the info need not be computed. (2) It's dubious to swallow CyclicReference errors anywhere, but I deemed it too risky to propagate them. But at least the CyclicReference is now logged if -Ylog-implicit is true. This hopefully spares future maintainers the same detective work I had to go through when digging this out.
Diffstat (limited to 'test/files/neg/t3631.scala')
0 files changed, 0 insertions, 0 deletions