Skip to content

Commit

Permalink
Backport "Fix erasure crash for Inlined rhs of a context function clo…
Browse files Browse the repository at this point in the history
…sure" to LTS (#21114)

Backports #20398 to the LTS branch.

PR submitted by the release tooling.
[skip ci]
  • Loading branch information
WojciechMazur authored Jul 8, 2024
2 parents 1537ae1 + d441dae commit 7c1bb85
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
2 changes: 2 additions & 0 deletions compiler/src/dotty/tools/dotc/transform/Erasure.scala
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,8 @@ object Erasure {
vparams = vparams :+ param
if crCount == 1 then meth.rhs.changeOwnerAfter(meth.symbol, sym, erasurePhase)
else skipContextClosures(meth.rhs, crCount - 1)
case inlined: Inlined =>
skipContextClosures(Inlines.dropInlined(inlined), crCount)

var rhs1 = skipContextClosures(ddef.rhs.asInstanceOf[Tree], contextResultCount(sym))

Expand Down
14 changes: 14 additions & 0 deletions tests/pos-macros/i16963/Macro_1.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import scala.quoted.*

inline def myMacro = ${ myMacroExpr }

def myMacroExpr(using Quotes) =
import quotes.reflect.*

'{ def innerMethod = (_: String) ?=> ???; () }.asTerm match
case block @ Inlined(_, _, Block(List(defdef: DefDef), _)) =>
val rhs =
given Quotes = defdef.symbol.asQuotes
'{ (x: String) ?=> ??? }.asTerm

Block(List(DefDef(defdef.symbol, _ => Some(rhs))), '{}.asTerm).asExprOf[Unit]
1 change: 1 addition & 0 deletions tests/pos-macros/i16963/Test_2.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
def method: Unit = myMacro

0 comments on commit 7c1bb85

Please sign in to comment.