diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-02-02 14:27:39 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-02-02 15:13:29 +0100 |
commit | b0c4353ea1ad0af81cef31e460746d887ef151e2 (patch) | |
tree | 68a51f2ae5f6064c8f8be8ea5074c9b2a70c2520 /test | |
parent | f59aeb58681d1dba8d32886de4785f6fb8dc9eff (diff) | |
download | scala-b0c4353ea1ad0af81cef31e460746d887ef151e2.tar.gz scala-b0c4353ea1ad0af81cef31e460746d887ef151e2.tar.bz2 scala-b0c4353ea1ad0af81cef31e460746d887ef151e2.zip |
SI-8228 Avoid infinite loop with erroneous code, overloading
`isApplicableBasedOnArity` couldn't get of the ferris wheel after
as `followApply` kept insisting on another spin.
scala> ErrorType nonPrivateMember nme.apply
res0: $r.intp.global.Symbol = value apply
scala> res0.info
res1: $r.intp.global.Type = <error>
This commit makes `followApply` consider that an `ErrorType`
does not contain an `apply` member.
I also considered whether to do a deep check on the type
(`isErroneous`), but I can't motivate this with a test.
I tend to think we *shouldn't* do that: `List[${ErrorType}]`
still has an `apply` member that we should follow, right?
Diffstat (limited to 'test')
-rw-r--r-- | test/files/neg/t8228.check | 4 | ||||
-rw-r--r-- | test/files/neg/t8228.scala | 7 |
2 files changed, 11 insertions, 0 deletions
diff --git a/test/files/neg/t8228.check b/test/files/neg/t8228.check new file mode 100644 index 0000000000..02eff4b1b7 --- /dev/null +++ b/test/files/neg/t8228.check @@ -0,0 +1,4 @@ +t8228.scala:4: error: recursive value foo needs type + val foo = foo(null) + ^ +one error found diff --git a/test/files/neg/t8228.scala b/test/files/neg/t8228.scala new file mode 100644 index 0000000000..19d71aeab4 --- /dev/null +++ b/test/files/neg/t8228.scala @@ -0,0 +1,7 @@ +object X { + def bar = { + def foo(x: Any) = "" + val foo = foo(null) + foo(null) // cycle in isApplicableBasedOnArity + } +} |