Skip to content

Commit

Permalink
Fix stale symbol errors connected to lazyvals
Browse files Browse the repository at this point in the history
The actual stale symbol error, while recent, seems correct to me.
There is no reason why an earlier phase (Mixins) should see denotation
from a later phase (LazyVals) - if the opposite is true (like with the fix
here) the bringForward method is able to recover with a NoDenotation,
which is what we want.
  • Loading branch information
jchyb committed Aug 23, 2024
1 parent b64afad commit fbc3e34
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 0 deletions.
1 change: 1 addition & 0 deletions compiler/src/dotty/tools/dotc/transform/LazyVals.scala
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,7 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
newSymbol(claz, offsetName(info.defs.size), Synthetic, defn.LongType).enteredAfter(this)
case None =>
newSymbol(claz, offsetName(0), Synthetic, defn.LongType).enteredAfter(this)
offsetSymbol.installAfter(this)
offsetSymbol.nn.addAnnotation(Annotation(defn.ScalaStaticAnnot, offsetSymbol.nn.span))
val fieldTree = thizClass.select(lazyNme.RLazyVals.getDeclaredField).appliedTo(Literal(Constant(containerName.mangledString)))
val offsetTree = ValDef(offsetSymbol.nn, getOffset.appliedTo(fieldTree))
Expand Down
12 changes: 12 additions & 0 deletions tests/pos/i21271/Macro.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import scala.quoted.*

trait Schema
object Schema:
lazy val sampleDate: String = "" // lazy val requried to reproduce

inline def derived: Schema =
annotations
new Schema {}

inline def annotations: Int = ${ annotationsImpl }
def annotationsImpl(using Quotes): Expr[Int] = Expr(1)
1 change: 1 addition & 0 deletions tests/pos/i21271/Test.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
val inputValueSchema = Schema.derived

0 comments on commit fbc3e34

Please sign in to comment.