Skip to content

Compiler crashes when using a combination of by name parameter, default parameter, and empty argument list #13162

@Alex1005a

Description

@Alex1005a

Reproduction steps

Scala version: 2.13.18

trait Task {
  def run(x: Int = 0): Bar
}
trait Foo {
  def foo(): Task
}
trait Bar {
  def bar(right: Unit): Unit
}
class Test {
  def in(testFun: => Any): Unit = ???
  in {
    val f: Foo = ???

    val r = f.foo()
    r.run().bar() // good

    f.foo().run().bar(()) // good

    f.foo().run().bar() // exception
  }
}

Problem

java.lang.IllegalArgumentException: Could not find proxy for <triedcooking> val f: ShouldEqualbug.this.Foo

Details
rror: java.lang.IllegalArgumentException: Could not find proxy for val f: ShouldEqualbug.Foo in List(value f, method $anonfun$new$1, value <local TestCompilerFail>, class TestCompilerFail, package ShouldEqualbug, package <root>) (currentOwner= value qual$1 )
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.searchIn$1(LambdaLift.scala:324)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.$anonfun$proxy$4(LambdaLift.scala:329)
	at scala.Option.getOrElse(Option.scala:201)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.searchIn$1(LambdaLift.scala:329)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.$anonfun$proxy$4(LambdaLift.scala:329)
	at scala.Option.getOrElse(Option.scala:201)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.searchIn$1(LambdaLift.scala:329)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.$anonfun$proxy$4(LambdaLift.scala:329)
	at scala.Option.getOrElse(Option.scala:201)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.searchIn$1(LambdaLift.scala:329)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.$anonfun$proxy$4(LambdaLift.scala:329)
	at scala.Option.getOrElse(Option.scala:201)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.searchIn$1(LambdaLift.scala:329)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.$anonfun$proxy$4(LambdaLift.scala:329)
	at scala.Option.getOrElse(Option.scala:201)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.searchIn$1(LambdaLift.scala:329)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.$anonfun$proxy$4(LambdaLift.scala:329)
	at scala.Option.getOrElse(Option.scala:201)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.searchIn$1(LambdaLift.scala:329)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.proxy(LambdaLift.scala:338)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.proxyRef(LambdaLift.scala:378)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.postTransform(LambdaLift.scala:529)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$Select.transform(Trees.scala:879)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$Apply.transform(Trees.scala:813)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$ValDef.$anonfun$transform$4(Trees.scala:435)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:43)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
	at scala.reflect.internal.Trees$ValDef.transform(Trees.scala:434)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2625)
	at scala.collection.immutable.List.loop$3(List.scala:462)
	at scala.collection.immutable.List.mapConserve(List.scala:487)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2623)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:577)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$Block.transform(Trees.scala:582)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$Select.transform(Trees.scala:879)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$Apply.transform(Trees.scala:813)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$Block.transform(Trees.scala:582)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$DefDef.$anonfun$transform$5(Trees.scala:455)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:43)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
	at scala.reflect.internal.Trees$DefDef.transform(Trees.scala:453)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2625)
	at scala.collection.immutable.List.loop$3(List.scala:462)
	at scala.collection.immutable.List.mapConserve(List.scala:487)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2623)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:577)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$Block.transform(Trees.scala:582)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.api.Trees$Transformer.$anonfun$transformTrees$1(Trees.scala:2594)
	at scala.collection.immutable.List.loop$3(List.scala:462)
	at scala.collection.immutable.List.mapConserve(List.scala:487)
	at scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2594)
	at scala.reflect.internal.Trees$Apply.transform(Trees.scala:813)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$2(Trees.scala:2624)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:43)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
	at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2624)
	at scala.collection.immutable.List.loop$3(List.scala:462)
	at scala.collection.immutable.List.mapConserve(List.scala:487)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2623)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:577)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$Template.transform(Trees.scala:570)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$1(TypingTransformers.scala:53)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:43)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:53)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2598)
	at scala.reflect.internal.Trees$ClassDef.$anonfun$transform$2(Trees.scala:363)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:43)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
	at scala.reflect.internal.Trees$ClassDef.transform(Trees.scala:362)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:57)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:60)
	at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2625)
	at scala.collection.immutable.List.loop$3(List.scala:462)
	at scala.collection.immutable.List.mapConserve(List.scala:487)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2623)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:577)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:60)
	at scala.reflect.internal.Trees$PackageDef.$anonfun$transform$1(Trees.scala:344)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:43)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
	at scala.reflect.internal.Trees$PackageDef.transform(Trees.scala:344)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$2(TypingTransformers.scala:55)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:43)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
	at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:55)
	at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:309)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:551)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:559)
	at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:182)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.super$transformUnit(LambdaLift.scala:583)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.$anonfun$transformUnit$1(LambdaLift.scala:583)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:292)
	at scala.reflect.internal.SymbolTable.exitingPhase(SymbolTable.scala:314)
	at scala.tools.nsc.SubComponent.afterOwnPhase(SubComponent.scala:74)
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformUnit(LambdaLift.scala:583)
	at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:32)
	at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:485)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:432)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1559)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1543)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1535)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1672)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:48)
	at scala.tools.nsc.MainClass.doCompile(Main.scala:30)
	at scala.tools.nsc.Driver.process(Driver.scala:68)
	at scala.tools.nsc.Driver.main(Driver.scala:82)
	at scala.tools.nsc.Main.main(Main.scala)
I think this is related to #11556: this example is minimized from the code with the same test framework.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions