Skip to content

Compiler Crashes when extending a trait containing an abstract inline in different project #11075

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
joschua-fink opened this issue Jan 12, 2021 · 4 comments · Fixed by #11116
Assignees
Milestone

Comments

@joschua-fink
Copy link

Minimized code

// in project A
trait A {
  inline def a: Int
}

// in project B
trait B extends A {
  inline def a: Int = 0
}

Output

Compiler crash in Scala 3.0.0-M3 when trying to compile project B.

[error] scala.MatchError: 17 (of class java.lang.Integer)
[error] dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readConstant(TreeUnpickler.scala:288)
[error] dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readSimpleType$1(TreeUnpickler.scala:438)
[error] dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readType(TreeUnpickler.scala:441)
[error] dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readPathTerm$1(TreeUnpickler.scala:1048)
[error] dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readSimpleTerm$1(TreeUnpickler.scala:1112)
[error] dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1262)
[error] dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.createMemberSymbol$$anonfun$1(TreeUnpickler.scala:610)
[error] dotty.tools.dotc.core.Annotations$.dotty$tools$dotc$core$Annotations$$anon$1$$_$$lessinit$greater$$anonfun$1(Annotations.scala:127)
[error] dotty.tools.dotc.core.Annotations$LazyBodyAnnotation.tree(Annotations.scala:115)
[error] dotty.tools.dotc.typer.Inliner$.bodyToInline(Inliner.scala:47)
[error] dotty.tools.dotc.sbt.ExtractAPICollector.apiAnnotations(ExtractAPI.scala:589)
[error] dotty.tools.dotc.sbt.ExtractAPICollector.apiDef(ExtractAPI.scala:369)
[error] dotty.tools.dotc.sbt.ExtractAPICollector.apiDefinition(ExtractAPI.scala:338)
[error] dotty.tools.dotc.sbt.ExtractAPICollector.apiDefinitions$$anonfun$1(ExtractAPI.scala:323)
[error] scala.collection.immutable.List.map(List.scala:250)
[error] dotty.tools.dotc.sbt.ExtractAPICollector.apiDefinitions(ExtractAPI.scala:323)
[error] dotty.tools.dotc.sbt.ExtractAPICollector.$anonfun$7(ExtractAPI.scala:284)
[error] dotty.tools.dotc.sbt.ThunkHolder.$anonfun$1(ThunkHolder.scala:28)
[error] xsbti.api.SafeLazy$Impl.get(SafeLazy.java:64)
[error] dotty.tools.dotc.sbt.ThunkHolder.forceThunks$$anonfun$1(ThunkHolder.scala:19)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.dotc.sbt.ThunkHolder.forceThunks(ThunkHolder.scala:19)
[error] dotty.tools.dotc.sbt.ThunkHolder.forceThunks$(ThunkHolder.scala:12)
[error] dotty.tools.dotc.sbt.ExtractAPICollector.forceThunks(ExtractAPI.scala:129)
[error] dotty.tools.dotc.sbt.ExtractAPICollector.apiSource(ExtractAPI.scala:189)
[error] dotty.tools.dotc.sbt.ExtractAPI.run(ExtractAPI.scala:68)
[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:185)
[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:195)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
[error] scala.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:210)
[error] dotty.tools.dotc.Run.compileSources(Run.scala:146)
[error] dotty.tools.dotc.Run.compile(Run.scala:130)
[error] dotty.tools.dotc.Driver.doCompile(Driver.scala:39)
[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:92)
[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:573)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:573)
[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:459)
[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:414)
[error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:499)
[error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:401)
[error] sbt.internal.inc.Incremental$.apply(Incremental.scala:166)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:573)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:491)
[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:2177)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2134)
[error] sbt.internal.io.Retry$.apply(Retry.scala:40)
[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:2130)
[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 project2 / Compile / compileIncremental' for the full output
[error] (project2 / Compile / compileIncremental) scala.MatchError: 17 (of class java.lang.Integer)
[error] Total time: 1 s, completed 12.01.2021, 16:04:39

Expectation

No crash :-)

Notes

I would be thankful for a quick workaround. So far I haven't found one.

// in project A
trait A {
  inline def a: Int
}

trait A0 extends A {
  inline def a: Int = 0
}

// in project B
trait B extends A0

crashes also in project B. And so does exporting project A as library instead of depending on it via dependsOn in sbt.

@joschua-fink
Copy link
Author

joschua-fink commented Jan 12, 2021

I'm also getting the same compiler error from time to time in a single project, after updating a source file containing inlines, when dotty tries to partially recompile the project. Running a clean in sbt in the project to force a full recompile, solves the problem in this situation.

@odersky
Copy link
Contributor

odersky commented Jan 13, 2021

I can't reproduce this. I tried the two files as given, compiled first A and then B. That worked OK.

@smarter
Copy link
Member

smarter commented Jan 13, 2021

The crash is in ExtractAPI, when not running in sbt that phase isn't run by default, but you can enable it with -Yforce-sbt-phases, that should help reproduce the problem.

@odersky
Copy link
Contributor

odersky commented Jan 13, 2021

Ah, now I can reproduce.

@odersky odersky self-assigned this Jan 13, 2021
odersky added a commit to dotty-staging/dotty that referenced this issue Jan 13, 2021
@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.

5 participants