Skip to content

Bad parameter reference for inlined given definition #9965

@nicolasstucki

Description

@nicolasstucki

Minimized code

class D[T] class C { def f() = { locally { given d[T] as D[T] g[D[Int]](d[Int]) } } inline def locally[T](inline body: T): T = body def g[T](x: T): T = x }

Output (click arrow to expand)

checking tests/pos/inlined-given.scala after phase typer exception while typing this.g[D[Int]](d[Int]) of class class dotty.tools.dotc.ast.Trees$Apply # -1 exception while typing { class d[T >: Nothing <: Any]() extends D[d.this.T]() { T } final given def d[T >: Nothing <: Any]: d[T] = new d[T]() this.g[D[Int]](d[Int]) } of class class dotty.tools.dotc.ast.Trees$Block # -1 exception while typing { class d[T >: Nothing <: Any]() extends D[d.this.T]() { T } final given def d[T >: Nothing <: Any]: d[T] = new d[T]() this.g[D[Int]](d[Int]) } of class class dotty.tools.dotc.ast.Trees$Inlined # -1 exception while typing { class d[T >: Nothing <: Any]() extends D[d.this.T]() { T } final given def d[T >: Nothing <: Any]: d[T] = new d[T]() this.g[D[Int]](d[Int]) }:D[Int] of class class dotty.tools.dotc.ast.Trees$Typed # -1 exception while typing { class d[T >: Nothing <: Any]() extends D[d.this.T]() { T } final given def d[T >: Nothing <: Any]: d[T] = new d[T]() this.g[D[Int]](d[Int]) }:D[Int] of class class dotty.tools.dotc.ast.Trees$Inlined # -1 exception while typing { { class d[T >: Nothing <: Any]() extends D[d.this.T]() { T } final given def d[T >: Nothing <: Any]: d[T] = new d[T]() this.g[D[Int]](d[Int]) }:D[Int] } of class class dotty.tools.dotc.ast.Trees$Block # -1 exception while typing def f(): D[Int] = { { class d[T >: Nothing <: Any]() extends D[d.this.T]() { T } final given def d[T >: Nothing <: Any]: d[T] = new d[T]() this.g[D[Int]](d[Int]) }:D[Int] } of class class dotty.tools.dotc.ast.Trees$DefDef # -1 exception while typing class C() extends Object() { def f(): D[Int] = { { class d[T >: Nothing <: Any]() extends D[d.this.T]() { T } final given def d[T >: Nothing <: Any]: d[T] = new d[T]() this.g[D[Int]](d[Int]) }:D[Int] } inline def locally[T >: Nothing <: Any](inline body: T): T = body:T def g[T >: Nothing <: Any](x: T): T = x } of class class dotty.tools.dotc.ast.Trees$TypeDef # -1 exception while typing package <empty> { class D[T >: Nothing <: Any]() extends Object() { T } class C() extends Object() { def f(): D[Int] = { { class d[T >: Nothing <: Any]() extends D[d.this.T]() { T } final given def d[T >: Nothing <: Any]: d[T] = new d[T]() this.g[D[Int]](d[Int]) }:D[Int] } inline def locally[T >: Nothing <: Any](inline body: T): T = body:T def g[T >: Nothing <: Any](x: T): T = x } } of class class dotty.tools.dotc.ast.Trees$PackageDef # -1 *** error while checking tests/pos/inlined-given.scala after phase typer *** exception occurred while compiling tests/pos/inlined-given.scala class dotty.tools.dotc.reporting.Diagnostic$StickyError at tests/pos/inlined-given.scala:<90..90>: bad parameter reference d.this.T at Ycheck the parameter is type T in class d but the prefix (d.this : d) does not define any corresponding arguments. while compiling tests/pos/inlined-given.scala Exception in thread "main" class dotty.tools.dotc.reporting.Diagnostic$StickyError at tests/pos/inlined-given.scala:<90..90>: bad parameter reference d.this.T at Ycheck the parameter is type T in class d but the prefix (d.this : d) does not define any corresponding arguments. at dotty.tools.dotc.report$.error(report.scala:71) at dotty.tools.dotc.report$.error(report.scala:75) at dotty.tools.dotc.typer.ErrorReporting$.errorType(ErrorReporting.scala:34) at dotty.tools.dotc.typer.ErrorReporting$.errorTree(ErrorReporting.scala:26) at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2523) at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122) at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2589) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2593) at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317) at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2708) at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:903) at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$2$$anonfun$1(TreeChecker.scala:503) at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199) at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:503) at dotty.tools.dotc.transform.TreeChecker$Checker.withBlock(TreeChecker.scala:227) at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:503) at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2467) at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2520) at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122) at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2589) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2593) at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317) at dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1630) at dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined$$anonfun$1(TreeChecker.scala:506) at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199) at dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined(TreeChecker.scala:506) at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2480) at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2520) at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122) at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2589) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2593) at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317) at dotty.tools.dotc.typer.ReTyper.typedTyped(ReTyper.scala:60) at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2464) at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2520) at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122) at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2589) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2593) at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317) at dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1630) at dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined$$anonfun$1(TreeChecker.scala:506) at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199) at dotty.tools.dotc.transform.TreeChecker$Checker.typedInlined(TreeChecker.scala:506) at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2480) at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2520) at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122) at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2589) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2593) at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317) at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2708) at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:903) at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$2$$anonfun$1(TreeChecker.scala:503) at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199) at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:503) at dotty.tools.dotc.transform.TreeChecker$Checker.withBlock(TreeChecker.scala:227) at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:503) at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2467) at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2520) at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122) at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2589) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2593) at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317) at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2708) at dotty.tools.dotc.typer.Typer.$anonfun$34(Typer.scala:1982) at dotty.tools.dotc.typer.PrepareInlineable$.dropInlineIfError(PrepareInlineable.scala:217) at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1982) at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$2$$anonfun$1(TreeChecker.scala:477) at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199) at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$1(TreeChecker.scala:480) at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199) at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef(TreeChecker.scala:481) at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2436) at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2519) at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122) at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2589) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2593) at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317) at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2615) at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2664) at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:521) at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:2120) at dotty.tools.dotc.transform.TreeChecker$Checker.typedClassDef(TreeChecker.scala:453) at dotty.tools.dotc.typer.Typer.typedTypeOrClassDef$2(Typer.scala:2447) at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2451) at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2519) at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122) at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2589) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2593) at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317) at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2615) at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2664) at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:521) at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:2245) at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2491) at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2520) at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122) at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2589) at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2593) at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317) at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2708) at dotty.tools.dotc.transform.TreeChecker.check(TreeChecker.scala:151) at dotty.tools.dotc.transform.TreeChecker.run(TreeChecker.scala:120) at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:296) at scala.collection.immutable.List.map(List.scala:246) at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:297) at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185) at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15) at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10) at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323) at dotty.tools.dotc.Run.runPhases$5(Run.scala:195) at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203) at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12) at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67) at dotty.tools.dotc.Run.compileUnits(Run.scala:210) at dotty.tools.dotc.Run.compileSources(Run.scala:147) at dotty.tools.dotc.Run.compile(Run.scala:129) at dotty.tools.dotc.Driver.doCompile(Driver.scala:38) at dotty.tools.dotc.Driver.process(Driver.scala:195) at dotty.tools.dotc.Driver.process(Driver.scala:164) at dotty.tools.dotc.Driver.process(Driver.scala:176) at dotty.tools.dotc.Driver.main(Driver.scala:203) at dotty.tools.dotc.Main.main(Main.scala)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions