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
36713671  override  protected  def  explain (using  Context ):  String  = 
36723672    " Usually the given in scope is intended, but you must specify it after explicit `using`." 
36733673
3674- final  class  RecurseWithDefault (using  Context ) extends  TypeMsg (RecurseWithDefaultID ): 
3674+ final  class  RecurseWithDefault (name :  Name )( using  Context ) extends  TypeMsg (RecurseWithDefaultID ): 
36753675  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 . " 
36773677  override  protected  def  explain (using  Context ):  String  = 
36783678    " 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 {
327327
328328        if  isRecursiveCall then 
329329          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  _ => 
332335
333336          if  (inTailPosition) {
334337            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