File tree Expand file tree Collapse file tree 3 files changed +25
-4
lines changed
compiler/src/dotty/tools/dotc Expand file tree Collapse file tree 3 files changed +25
-4
lines changed Original file line number Diff line number Diff line change @@ -3671,8 +3671,8 @@ final class DefaultShadowsGiven(name: Name)(using Context) extends TypeMsg(Defau
3671
3671
override protected def explain (using Context ): String =
3672
3672
" Usually the given in scope is intended, but you must specify it after explicit `using`."
3673
3673
3674
- final class RecurseWithDefault (using Context ) extends TypeMsg (RecurseWithDefaultID ):
3674
+ final class RecurseWithDefault (name : Name )( using Context ) extends TypeMsg (RecurseWithDefaultID ):
3675
3675
override protected def msg (using Context ): String =
3676
- i " Recursive call used a default argument. "
3676
+ i " Recursive call used a default argument for parameter $name . "
3677
3677
override protected def explain (using Context ): String =
3678
3678
" It's more explicit to pass current or modified arguments in a recursion."
Original file line number Diff line number Diff line change @@ -327,8 +327,11 @@ class TailRec extends MiniPhase {
327
327
328
328
if isRecursiveCall then
329
329
if ctx.settings.Whas .recurseWithDefault then
330
- if tree.args.exists(_.symbol.name.is(DefaultGetterName )) then
331
- report.warning(RecurseWithDefault (), tree.srcPos)
330
+ tree.args.find(_.symbol.name.is(DefaultGetterName )) match
331
+ case Some (arg) =>
332
+ val DefaultGetterName (_, index) = arg.symbol.name: @ unchecked
333
+ report.warning(RecurseWithDefault (calledMethod.info.firstParamNames(index)), tree.srcPos)
334
+ case _ =>
332
335
333
336
if (inTailPosition) {
334
337
tailrec.println(" Rewriting tail recursive call: " + tree.span)
Original file line number Diff line number Diff line change
1
+ -- [E220] Type Warning: tests/warn/i23541.scala:29:13 ------------------------------------------------------------------
2
+ 29 | println(f(using s = "ab")) // warn uses default instead of given // prints "ab"
3
+ | ^^^^^^^^^^^^^^^^^
4
+ | Argument for implicit parameter i was supplied using a default argument.
5
+ |
6
+ | longer explanation available when compiling with `-explain`
7
+ -- [E221] Type Warning: tests/warn/i23541.scala:5:17 -------------------------------------------------------------------
8
+ 5 | else fun(x - 1)(using p = p + x) // warn recurse uses default (instead of given passed down the stack)
9
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
10
+ | Recursive call used a default argument for parameter q.
11
+ |
12
+ | longer explanation available when compiling with `-explain`
13
+ -- [E221] Type Warning: tests/warn/i23541.scala:9:17 -------------------------------------------------------------------
14
+ 9 | else gun(x - 1)(p = p + x) // warn recurse uses default (value not passed down the stack)
15
+ | ^^^^^^^^^^^^^^^^^^^^^
16
+ | Recursive call used a default argument for parameter q.
17
+ |
18
+ | longer explanation available when compiling with `-explain`
You can’t perform that action at this time.
0 commit comments