Skip to content

Crash when macro mixin val setter in trait #10043

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
bishabosha opened this issue Oct 20, 2020 · 0 comments · Fixed by #9984
Closed

Crash when macro mixin val setter in trait #10043

bishabosha opened this issue Oct 20, 2020 · 0 comments · Fixed by #9984
Assignees
Milestone

Comments

@bishabosha
Copy link
Member

Minimized code

// Trait.scala
package example

import quoted._

trait Trait {
  final val foo = 23
}

object Trait {
  inline def get: Trait = ${ getImpl }

  def getImpl(using QuoteContext): Expr[Trait] = '{ new Trait {} }
}
// Test.scala
@main def Test = println(example.Trait.get)

Output (click arrow to expand)

[error] ## Exception when compiling 2 sources to /Users/jamie/workspace/dotty-bugs/target/scala-0.27/classes
[error] dotty.tools.dotc.core.Denotations$StaleSymbol: stale symbol; method example$Trait$_setter_$foo_=#19745 in trait Trait, defined in Period(56..77, run = 2), is referred to in run Period(61..61, run = 3)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.staleSymbolError(Denotations.scala:928)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.bringForward(Denotations.scala:725)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.toNewRun$1(Denotations.scala:776)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:850)
[error] dotty.tools.dotc.core.Symbols$Symbol.recomputeDenot(Symbols.scala:119)
[error] dotty.tools.dotc.core.Symbols$Symbol.computeDenot(Symbols.scala:113)
[error] dotty.tools.dotc.core.Symbols$Symbol.denot(Symbols.scala:106)
[error] dotty.tools.dotc.core.Symbols$.toDenot(Symbols.scala:487)
[error] dotty.tools.dotc.transform.Mixin.traitInits$1$$anonfun$1(Mixin.scala:254)
[error] scala.collection.Iterator$$anon$6.hasNext(Iterator.scala:472)
[error] scala.collection.Iterator$$anon$9.hasNext(Iterator.scala:574)
[error] scala.collection.immutable.List.prependedAll(List.scala:155)
[error] scala.collection.immutable.List$.from(List.scala:651)
[error] scala.collection.immutable.List$.from(List.scala:648)
[error] scala.collection.IterableOps$WithFilter.map(Iterable.scala:885)
[error] dotty.tools.dotc.transform.Mixin.traitInits$3(Mixin.scala:269)
[error] dotty.tools.dotc.transform.Mixin.$anonfun$5(Mixin.scala:299)
[error] scala.collection.immutable.List.flatMap(List.scala:293)
[error] dotty.tools.dotc.transform.Mixin.transformTemplate(Mixin.scala:302)
[error] dotty.tools.dotc.transform.Mixin.transformTemplate(Mixin.scala:177)
[error] dotty.tools.dotc.transform.MegaPhase.goTemplate(MegaPhase.scala:1003)
[error] dotty.tools.dotc.transform.MegaPhase.goTemplate(MegaPhase.scala:1004)
[error] dotty.tools.dotc.transform.MegaPhase.goTemplate(MegaPhase.scala:1004)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:362)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:255)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:426)
[error] dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:436)
[error] dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:441)
[error] dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:441)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:298)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:322)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
[error] dotty.tools.dotc.transform.MegaPhase.recur$2(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:279)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:299)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
[error] dotty.tools.dotc.transform.MegaPhase.mapDefDef$1(MegaPhase.scala:248)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:251)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:426)
[error] dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:436)
[error] dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:441)
[error] dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
[error] dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:441)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:361)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:255)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:426)
[error] dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:436)
[error] dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:441)
[error] dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
[error] dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:441)
[error] dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:381)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:384)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:447)
[error] dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:459)
[error] dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:296)
[error] scala.collection.immutable.List.map(List.scala:246)
[error] dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:297)
[error] dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:180)
[error] dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
[error] dotty.tools.dotc.Run.runPhases$5(Run.scala:190)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:198)
[error] dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:64)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:205)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:147)
[error] dotty.tools.dotc.Driver.finish$1(Driver.scala:48)
[error] dotty.tools.dotc.Driver.doCompile(Driver.scala:51)
[error] dotty.tools.dotc.Driver.process(Driver.scala:195)
[error] dotty.tools.dotc.Main.process(Main.scala)
[error] xsbt.CachedCompilerImpl.run(CachedCompilerImpl.java:69)
[error] xsbt.CompilerInterface.run(CompilerInterface.java:41)
[error] sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] java.lang.reflect.Method.invoke(Method.java:498)
[error] sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:248)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:122)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:95)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:91)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:186)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3(MixedAnalyzingCompiler.scala:82)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3$adapted(MixedAnalyzingCompiler.scala:77)
[error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:215)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:77)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:146)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:343)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:343)
[error] sbt.internal.inc.Incremental$.doCompile(Incremental.scala:120)
[error] sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:100)
[error] sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:180)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:98)
[error] sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:102)
[error] sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:155)
[error] sbt.internal.inc.Incremental$.compile(Incremental.scala:92)
[error] sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:75)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:348)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:301)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:168)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:248)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:74)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1765)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1738)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] sbt.std.Transform$$anon$4.work(Transform.scala:67)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:281)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
[error] sbt.Execute.work(Execute.scala:290)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:281)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error] java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error] java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] java.lang.Thread.run(Thread.java:748)
[error]            
[error] stack trace is suppressed; run last Compile / compileIncremental for the full output
[error] (Compile / compileIncremental) dotty.tools.dotc.core.Denotations$StaleSymbol: stale symbol; method example$Trait$_setter_$foo_=#19745 in trait Trait, defined in Period(56..77, run = 2), is referred to in run Period(61..61, run = 3)
@bishabosha bishabosha changed the title Crash when macro mix in val setter in trait Crash when macro mixin val setter in trait Oct 20, 2020
@nicolasstucki nicolasstucki linked a pull request Jan 14, 2021 that will close this issue
@Kordyjan Kordyjan added this to the 3.0.0 milestone Aug 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants