Skip to content

Commit 8f3c422

Browse files
committed
Fix trait setter validity
Trait setters had a validity interval that started before they were created. This caused stale symbol errors in macro compilations.
1 parent 0ca0b9e commit 8f3c422

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

compiler/src/dotty/tools/dotc/transform/Mixin.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import SymUtils._
1010
import Symbols._
1111
import SymDenotations._
1212
import Types._
13+
import Periods._
1314
import Decorators._
1415
import DenotTransformers._
1516
import StdNames._
@@ -146,6 +147,7 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
146147
// !decl.isClass avoids forcing nested traits, preventing cycles
147148
if !decl.isClass && needsTraitSetter(decl) then
148149
val setter = makeTraitSetter(decl.asTerm)
150+
setter.validFor = Period(ctx.runId, thisPhase.next.id, decl.validFor.lastPhaseId)
149151
decls1.enter(setter)
150152
modified = true
151153
if modified then

tests/pos/i12140/Test.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@main def Test = println(example.Trait.get)

tests/pos/i12140/Trait.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Trait.scala
2+
package example
3+
4+
import quoted._
5+
6+
trait Trait {
7+
implicit val foo: Int = 23
8+
}
9+
10+
object Trait {
11+
inline def get: Trait = ${ getImpl }
12+
13+
def getImpl(using Quotes): Expr[Trait] = '{ new Trait {} }
14+
}

0 commit comments

Comments
 (0)