stale symbol involving trait mixin when defining and using macro in same project
See original GitHub issueCompiler version
3.0.0-RC2
Minimized code
I’m trying to compile the squeryl library under scala 3.0.0-RC2 and this line seems to be responsible for the compiler crashing:
implicit val numericComparisonEvidence: CanCompare[TNumeric, TNumeric] = new CanCompare[TNumeric, TNumeric]
I don’t know how relevant this is to the actual error (see below) but that’s the line the compiler points me to. I am note quite sure how to minimise it, but I could give it a try if someone could give me some advice as to how to approach it. Note that you can see the error for yourself in the CI checks (github action) of this PR.
Output
dotty.tools.dotc.core.Denotations$StaleSymbol: stale symbol; method org$squeryl$dsl$QueryDsl$_setter_$numericComparisonEvidence_$eq#75633 in trait QueryDsl, defined in Period(59..80, run = 2), is referred to in run Period(64..64, run = 3) while compiling /Users/bchazalet/development/code/cw/squeryl/src/main/scala-3/org/squeryl/internals/OptionType.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala-3/org/squeryl/internals/TableDefinitionInSchema.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala-3/org/squeryl/internals/TypeInfo.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/KeyedEntity.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/PrimitiveTypeMode.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/Query.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/Queryable.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/Schema.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/Session.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/Table.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/View.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/adapters/DB2Adapter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/adapters/DerbyAdapter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/adapters/H2Adapter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/adapters/MSSQLServer.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/adapters/MySQLAdapter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/adapters/MySQLInnoDBAdapter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/adapters/OracleAdapter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/adapters/PostgreSqlAdapter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/adapters/SQLiteAdapter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/annotations/ColumnBase.java, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/annotations/FieldToColumnCorrespondanceMode.java, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/annotations/OptionType.java, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/annotations/Row.java, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/annotations/Transient.java, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/annotations/package.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/customtypes/CustomTypesMode.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/AbstractQuery.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/CompositeKey.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/DelegateQuery.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/Group.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/ManyToMany.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/OptionalQueryable.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/QueryDsl.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/QueryYield.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/TypedExpression.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/ast/CastExpressionNode.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/ast/ExpressionNode.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/ast/OuterJoinExpression.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/ast/QueryExpressionElements.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/ast/QueryExpressionNode.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/ast/SelectElement.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/ast/UpdateStatement.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/ast/ViewExpressionNode.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/boilerplate/ComputeMeasuresSignaturesFromGroupByState.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/boilerplate/ComputeMeasuresSignaturesFromStartOrWhereState.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/boilerplate/FromSignatures.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/boilerplate/GroupBySignatures.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/boilerplate/JoinSignatures.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/boilerplate/OrderBySignatures.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/boilerplate/Query1.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/boilerplate/SampleTuple.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/fsm/BaseQueryYield.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/fsm/StartState.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/dsl/internal/JoinedQueryable.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/ArrayTEF.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/ColumnAttribute.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/DatabaseAdapter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/FieldMapper.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/FieldMetaData.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/FieldReferenceLinker.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/FieldTypeHandler.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/PosoLifecycleEvent.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/PosoMetaData.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/ResultSetMapper.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/StatementWriter.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/internals/Utils.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/logging/BarChartRenderer.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/logging/LocalH2SinkStatisticsListener.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/logging/StatisticsListener.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/logging/StatsSchema.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/logging/UsageProfileConsolidator.scala, /Users/bchazalet/development/code/cw/squeryl/src/main/scala/org/squeryl/pg/PgSchema.scala
[error] ## Exception when compiling 73 sources to /Users/bchazalet/development/code/cw/squeryl/target/scala-3.0.0-RC2/classes
[error] dotty.tools.dotc.core.Denotations$StaleSymbol: stale symbol; method org$squeryl$dsl$QueryDsl$_setter_$numericComparisonEvidence_$eq#75633 in trait QueryDsl, defined in Period(59..80, run = 2), is referred to in run Period(64..64, run = 3)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.staleSymbolError(Denotations.scala:957)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.bringForward(Denotations.scala:754)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.toNewRun$1(Denotations.scala:805)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:879)
[error] dotty.tools.dotc.core.Symbols$Symbol.recomputeDenot(Symbols.scala:122)
[error] dotty.tools.dotc.core.Symbols$Symbol.computeDenot(Symbols.scala:116)
[error] dotty.tools.dotc.core.Symbols$Symbol.denot(Symbols.scala:109)
[error] dotty.tools.dotc.core.Symbols$.toDenot(Symbols.scala:494)
[error] dotty.tools.dotc.transform.Mixin.traitInits$1$$anonfun$1(Mixin.scala:256)
[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:884)
[error] dotty.tools.dotc.transform.Mixin.traitInits$3(Mixin.scala:277)
[error] dotty.tools.dotc.transform.Mixin.$anonfun$5(Mixin.scala:307)
[error] scala.collection.immutable.List.flatMap(List.scala:293)
[error] dotty.tools.dotc.transform.Mixin.transformTemplate(Mixin.scala:310)
[error] dotty.tools.dotc.transform.Mixin.transformTemplate(Mixin.scala:177)
[error] dotty.tools.dotc.transform.MegaPhase.goTemplate(MegaPhase.scala:1004)
[error] dotty.tools.dotc.transform.MegaPhase.goTemplate(MegaPhase.scala:1005)
[error] dotty.tools.dotc.transform.MegaPhase.goTemplate(MegaPhase.scala:1005)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:363)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:429)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:256)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:427)
[error] dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:437)
[error] dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:442)
[error] dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:442)
[error] dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:442)
[error] dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:382)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:385)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:429)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:448)
[error] dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:460)
[error] dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:303)
[error] scala.collection.immutable.List.map(List.scala:246)
[error] dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:304)
[error] dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:205)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.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:215)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:223)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
[error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:230)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:172)
[error] dotty.tools.dotc.Driver.finish(Driver.scala:60)
[error] dotty.tools.dotc.Driver.doCompile(Driver.scala:40)
[error] dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:88)
[error] dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:186)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:241)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:176)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:157)
[error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:157)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:204)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:528)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:528)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:174)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:172)
[error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:457)
[error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:261)
[error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:412)
[error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:499)
[error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:399)
[error] sbt.internal.inc.Incremental$.apply(Incremental.scala:166)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:528)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:482)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:420)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:2346)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2303)
[error] sbt.internal.io.Retry$.apply(Retry.scala:46)
[error] sbt.internal.io.Retry$.apply(Retry.scala:28)
[error] sbt.internal.io.Retry$.apply(Retry.scala:23)
[error] sbt.internal.server.BspCompileTask$.compute(BspCompileTask.scala:31)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:2299)
[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:68)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error] sbt.Execute.work(Execute.scala:291)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
[error] java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[error] java.base/java.lang.Thread.run(Thread.java:832)
[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 org$squeryl$dsl$QueryDsl$_setter_$numericComparisonEvidence_$eq#75633 in trait QueryDsl, defined in Period(59..80, run = 2), is referred to in run Period(64..64, run = 3)
Expectation
Strangely, I have got a computer where it compiles ok, but another where it doesn’t and the CI where it doesn’t either. I’d expect it to always compile.
Issue Analytics
- State:
- Created 2 years ago
- Comments:6 (3 by maintainers)
Top Results From Across the Web
Scheme with Classes, Mixins, and Traits - CS @ Utah
The class system is implemented as a macro in terms of procedures and a record-type gen- erator; the mixin and trait patterns, in...
Read more >Scala macros. How to instantiate subclass and dynamically ...
I'm using Scala.js to write React code. I now have a form which contains bunch of input s, each needs a onChange callback...
Read more >How to Use Mixins in Sass and Pass Arguments – With Code ...
First we define a mixin using the @mixin at-rule. Then we give it a name – choose whatever you think will fit what...
Read more >Laravel Macroable: Understanding macros and mixin - Medium
Laravel Macroable is a package, that allows adding extra functionality to a class that is missing in the class definition through a simple...
Read more >NoDenotation - Javadoc.io
The class with the same (type-) name as this module or module class, ... Otherwise the symbol is stale, which constitutes an internal...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
I minimised this using my example from https://github.com/lampepfl/dotty/issues/10043, but adding implicit modifier
This is caused by having a macro defined and used in the same project, this requires the compiler to execute itself multiple times, and somehow when combined with mixing in traits this doesn’t work. If I move TypeInfo to its own project that the main project depends on, it compiles fine: https://github.com/smarter/squeryl/commit/c33e5826716993fbb34e6fb9025124f77076539f /cc @nicolasstucki @odersky