-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Implicit pass of "this" to a callback crashes with capture types #20135
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
Labels
Milestone
Comments
Full crash output with unhandled exception while running cc on /Users/pchabelski/IdeaProjects/scala-cli-tests/compiler-repro/repro.scala
An unhandled exception was thrown in the compiler.
Please file a crash report here:
https://github.com/scala/scala3/issues/new/choose
For non-enriched exceptions, compile with -Yno-enrich-error-messages.
while compiling: /Users/pchabelski/IdeaProjects/scala-cli-tests/compiler-repro/repro.scala
during phase: cc
mode: Mode(ImplicitsEnabled)
library version: version 2.13.12
compiler version: version 3.4.1
settings: -classpath /Users/pchabelski/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-library_3/3.4.1/scala3-library_3-3.4.1.jar:/Users/pchabelski/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.12/scala-library-2.13.12.jar -d /Users/pchabelski/IdeaProjects/scala-cli-tests/compiler-repro/.scala-build/compiler-repro_853f6d1dbb-28ebf8438e/classes/main -java-output-version 17 -sourceroot /Users/pchabelski/IdeaProjects/scala-cli-tests/compiler-repro
Exception in thread "main" dotty.tools.dotc.cc.IllegalCaptureRef: TermRef(TypeRef(ThisType(TypeRef(NoPrefix,module class <empty>)),class Page),val nw)
at dotty.tools.dotc.cc.CaptureOps$package$.toCaptureRef(CaptureOps.scala:87)
at dotty.tools.dotc.cc.CaptureOps$package$.$anonfun$1(CaptureOps.scala:96)
at scala.collection.immutable.List.map(List.scala:246)
at dotty.tools.dotc.cc.CaptureOps$package$.toCaptureSet(CaptureOps.scala:96)
at dotty.tools.dotc.cc.Setup$$anon$3.apply(Setup.scala:289)
at dotty.tools.dotc.cc.Setup.dotty$tools$dotc$cc$Setup$$transformExplicitType(Setup.scala:305)
at dotty.tools.dotc.cc.Setup.dotty$tools$dotc$cc$Setup$$transformTT(Setup.scala:316)
at dotty.tools.dotc.cc.Setup$$anon$5.transformResultType(Setup.scala:377)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse(Setup.scala:404)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1300)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1795)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse$$anonfun$1(Setup.scala:395)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.List.foreach(List.scala:333)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse(Setup.scala:395)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1300)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1693)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1797)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse(Setup.scala:422)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1300)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1679)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1797)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse(Setup.scala:422)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1796)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1796)
at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1693)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1797)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse(Setup.scala:422)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse(Setup.scala:397)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1300)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1795)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1301)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1795)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1301)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1755)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1797)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse(Setup.scala:422)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1796)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1796)
at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1752)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1797)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse(Setup.scala:415)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1300)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1795)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1301)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1795)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1301)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1795)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1301)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverse(Trees.scala:1795)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.recur$3(tpd.scala:1298)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1303)
at dotty.tools.dotc.ast.tpd$TreeTraverserWithPreciseImportContexts.apply(tpd.scala:1295)
at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1761)
at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1797)
at dotty.tools.dotc.cc.Setup$$anon$5.traverse(Setup.scala:422)
at dotty.tools.dotc.cc.Setup.setupUnit(Setup.scala:667)
at dotty.tools.dotc.cc.CheckCaptures$CaptureChecker.checkUnit(CheckCaptures.scala:1156)
at dotty.tools.dotc.transform.Recheck.run(Recheck.scala:167)
at dotty.tools.dotc.cc.CheckCaptures.run(CheckCaptures.scala:203)
at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:354)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.List.foreach(List.scala:333)
at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:360)
at dotty.tools.dotc.transform.Recheck.runOn(Recheck.scala:171)
at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:315)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at dotty.tools.dotc.Run.runPhases$1(Run.scala:337)
at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:350)
at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:360)
at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:69)
at dotty.tools.dotc.Run.compileUnits(Run.scala:360)
at dotty.tools.dotc.Run.compileSources(Run.scala:261)
at dotty.tools.dotc.Run.compile(Run.scala:246)
at dotty.tools.dotc.Driver.doCompile(Driver.scala:37)
at dotty.tools.dotc.Driver.process(Driver.scala:196)
at dotty.tools.dotc.Driver.process(Driver.scala:164)
at dotty.tools.dotc.Driver.process(Driver.scala:176)
at dotty.tools.dotc.Driver.main(Driver.scala:206)
at dotty.tools.dotc.Main.main(Main.scala)
Compilation failed |
There something wrong with how the context function type is expanded at Typer. I'm looking into it. Workaround: Replace last line with
|
odersky
added a commit
to dotty-staging/dotty
that referenced
this issue
Apr 10, 2024
…rees A non-sensical capture reference appeared in the type of a synthesized context function literal. We do clean out @retains annotations that can contain such references, but only for inferred type trees. The problem was that context function parameters were treated like explicitly given types before. Fixes scala#20135
odersky
added a commit
that referenced
this issue
Apr 11, 2024
A non-sensical capture reference appeared in the type of a synthesized context function literal. We do clean out @retains annotations that can contain such references, but only for inferred type trees. The problem was that context function parameters were treated like explicitly given types before. Fixes #20135
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Compiler version
3.4.0
Minimized code
Output (click arrow to expand)
The text was updated successfully, but these errors were encountered: