Skip to content

Commit 25bbac6

Browse files
committed
WIP more tests
1 parent aa0bccd commit 25bbac6

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1260,7 +1260,7 @@ object messages {
12601260
|""".stripMargin
12611261
}
12621262

1263-
case class OverloadedOrRecursiveMethodNeedsResultType(method: Names.TermName)(implicit ctx: Context)
1263+
case class OverloadedOrRecursiveMethodNeedsResultType(method: Names.Name)(implicit ctx: Context)
12641264
extends Message(OverloadedOrRecursiveMethodNeedsResultTypeID) {
12651265
val kind = "Syntax"
12661266
val msg = hl"""overloaded or recursive method ${method} needs return type"""

compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,46 @@ class ErrorMessagesTests extends ErrorMessagesTest {
277277
assertEquals("value x", denot.show)
278278
}
279279

280+
@Test def mutualRecursionre_i2001 =
281+
checkMessagesAfter(FrontEnd.name) {
282+
"""
283+
|class A {
284+
| def odd(x: Int) = if (x == 0) false else !even(x-1)
285+
| def even(x: Int) = if (x == 0) true else !odd(x-1) // error: overloaded or recursive method needs result type
286+
|}
287+
""".stripMargin
288+
}
289+
.expect { (ictx, messages) =>
290+
implicit val ctx: Context = ictx
291+
292+
assertMessageCount(1, messages)
293+
val OverloadedOrRecursiveMethodNeedsResultType(name) :: Nil = messages
294+
assertEquals("odd", name.show)
295+
}
296+
297+
@Test def mutualRecursion_i2001a =
298+
checkMessagesAfter(FrontEnd.name) {
299+
"""
300+
|class A {
301+
| def odd(x: Int) = if (x == 0) false else !even(x-1)
302+
| def even(x: Int) = {
303+
| def foo = {
304+
| if (x == 0) true else !odd(x-1) // error: overloaded or recursive method needs result type
305+
| }
306+
| false
307+
| }
308+
|}
309+
""".stripMargin
310+
}
311+
.expect { (ictx, messages) =>
312+
implicit val ctx: Context = ictx
313+
314+
assertMessageCount(1, messages)
315+
val CyclicReferenceInvolving(denot) :: Nil = messages
316+
assertEquals("value x", denot.show)
317+
}
318+
319+
280320
@Test def termMemberNeedsNeedsResultTypeForImplicitSearch =
281321
checkMessagesAfter(FrontEnd.name) {
282322
"""

tests/neg/i4709.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ class Test {
77
def test(ctx0: Context) = {
88
implicit val ctx = { ctx0.settings; ??? } // error
99
}
10+
def f: Unit = { implicitly[Int]; implicit val i = implicitly[Int] } // error
1011
}

0 commit comments

Comments
 (0)