Skip to content

Commit

Permalink
Eta expand export forwarders that have contetx function types
Browse files Browse the repository at this point in the history
Fixes #15181
  • Loading branch information
odersky authored and Kordyjan committed May 31, 2022
1 parent f7f239c commit 371e091
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/src/dotty/tools/dotc/transform/Erasure.scala
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ object Erasure {
case _: FunProto | AnyFunctionProto => tree
case _ => tree.tpe.widen match
case mt: MethodType if tree.isTerm =>
assert(mt.paramInfos.isEmpty)
assert(mt.paramInfos.isEmpty)//, i"bad adapt for $tree: $mt")
adaptToType(tree.appliedToNone, pt)
case tpw =>
if (pt.isInstanceOf[ProtoType] || tree.tpe <:< pt)
Expand Down
1 change: 1 addition & 0 deletions compiler/src/dotty/tools/dotc/typer/Namer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1177,6 +1177,7 @@ class Namer { typer: Typer =>
val ref = path.select(sym.asTerm)
val ddef = tpd.DefDef(forwarder.asTerm, prefss =>
ref.appliedToArgss(adaptForwarderParams(Nil, sym.info, prefss)))
.etaExpandCFT(using ctx.withOwner(forwarder))
if forwarder.isInlineMethod then
PrepareInlineable.registerInlineInfo(forwarder, ddef.rhs)
buf += ddef.withSpan(span)
Expand Down
1 change: 1 addition & 0 deletions compiler/test/dotc/pos-test-pickling.blacklist
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ i7740b.scala
i6507b.scala
i12299a.scala
i13871.scala
i15181.scala

# Tree is huge and blows stack for printing Text
i7034.scala
Expand Down
9 changes: 9 additions & 0 deletions tests/pos/i15181.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
object prelude:
//def scombine[A](x: A, y: A): Semigroup[A] ?=> A = Semigroup.scombine(x,y)
export Semigroup.*

trait Semigroup[A]:
def scombine(x: A, y: A): A

object Semigroup:
def scombine[A](x: A, y: A) = (s: Semigroup[A]) ?=> s.scombine(x,y)

0 comments on commit 371e091

Please sign in to comment.