Skip to content
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

bugfix: Handle NoClassDefFoundError coming from the compiler #158

Merged
merged 1 commit into from
Dec 6, 2023

Conversation

tgodzik
Copy link
Collaborator

@tgodzik tgodzik commented Dec 6, 2023

It seems due to some incremental compilation errors (possibly), an exception can be thrown from inlining and if we don't handle it, we will never finish the compilation:

java.lang.NoClassDefFoundError: besom/internal/Context
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402)
    at java.base/java.lang.Class.getMethodsRecursive(Class.java:3543)
    at java.base/java.lang.Class.getMethod0(Class.java:3529)
    at java.base/java.lang.Class.getMethod(Class.java:2225)
    at dotty.tools.dotc.quoted.Interpreter.getMethod(Interpreter.scala:221)
    at dotty.tools.dotc.quoted.Interpreter.interpretedStaticMethodCall(Interpreter.scala:173)
    at dotty.tools.dotc.quoted.Interpreter.interpretTree(Interpreter.scala:76)
    at dotty.tools.dotc.transform.Splicer$SpliceInterpreter.interpretTree(Splicer.scala:247)
    at dotty.tools.dotc.quoted.Interpreter.interpretTree$$anonfun$2(Interpreter.scala:95)
    at dotty.tools.dotc.transform.Splicer$.$anonfun$2(Splicer.scala:60)
    at scala.Option.fold(Option.scala:263)
    at dotty.tools.dotc.transform.Splicer$.splice(Splicer.scala:60)
    at dotty.tools.dotc.inlines.Inliner.dotty$tools$dotc$inlines$Inliner$$expandMacro(Inliner.scala:1042)
    at dotty.tools.dotc.inlines.Inliner$InlineTyper.typedApply(Inliner.scala:818)
    at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2928)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2991)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:126)
    at dotty.tools.dotc.inlines.Inliner$InlineTyper.typedUnadapted(Inliner.scala:904)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3058)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3062)
    at dotty.tools.dotc.typer.ReTyper.typedTyped(ReTyper.scala:64)
    at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2933)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2991)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:126)
    at dotty.tools.dotc.inlines.Inliner$InlineTyper.typedUnadapted(Inliner.scala:904)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3058)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3055)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3062)
    at dotty.tools.dotc.inlines.Inliner.inlined(Inliner.scala:671)
    at dotty.tools.dotc.inlines.Inlines$InlineCall.expand(Inlines.scala:444)
    at dotty.tools.dotc.inlines.Inlines$.inlineCall(Inlines.scala:151)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:99)
    at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1478)
    at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:73)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:93)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1228)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1228)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1230)
    at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:64)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:115)
    at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1483)
    at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:73)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:93)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1228)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1228)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1230)
    at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1491)
    at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:73)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:105)
    at dotty.tools.dotc.transform.Inlining$$anon$2.transform(Inlining.scala:62)
    at dotty.tools.dotc.transform.MacroTransform.run(MacroTransform.scala:18)
    at dotty.tools.dotc.transform.Inlining.run(Inlining.scala:34)
    at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:324)
    at scala.collection.immutable.List.map(List.scala:250)
    at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:328)
    at dotty.tools.dotc.transform.Inlining.runOn(Inlining.scala:38)
    at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:247)
    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:1321)
    at dotty.tools.dotc.Run.runPhases$1(Run.scala:263)
    at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:271)
    at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:280)
    at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:280)
    at dotty.tools.dotc.Run.compileSources(Run.scala:195)
    at dotty.tools.dotc.Run.compile(Run.scala:179)
    at dotty.tools.dotc.Driver.doCompile(Driver.scala:35)
    at dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:88)
    at dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
    at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.compileSources$1(BloopHighLevelCompiler.scala:133)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.$anonfun$compile$7(BloopHighLevelCompiler.scala:155)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.$anonfun$compile$1(BloopHighLevelCompiler.scala:71)
    at bloop.tracing.BraveTracer.traceInternal(BraveTracer.scala:67)
    at bloop.tracing.BraveTracer.trace(BraveTracer.scala:41)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.timed$1(BloopHighLevelCompiler.scala:70)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.$anonfun$compile$6(BloopHighLevelCompiler.scala:155)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:81)
    at monix.eval.internal.TaskRestartCallback.syncOnSuccess(TaskRestartCallback.scala:101)
    at monix.eval.internal.TaskRestartCallback.onSuccess(TaskRestartCallback.scala:74)
    at monix.eval.internal.TaskExecuteOn$AsyncRegister$$anon$1.run(TaskExecuteOn.scala:71)
    at monix.execution.internal.InterceptRunnable.run(InterceptRunnable.scala:27)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ClassNotFoundException: besom.internal.Context
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:440)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 89 more

It seems due to some incremental compilation errors (possibly), an exception can be thrown from inlining and if we don't handle it, we will never finish the compilation:

```
java.lang.NoClassDefFoundError: besom/internal/Context
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402)
    at java.base/java.lang.Class.getMethodsRecursive(Class.java:3543)
    at java.base/java.lang.Class.getMethod0(Class.java:3529)
    at java.base/java.lang.Class.getMethod(Class.java:2225)
    at dotty.tools.dotc.quoted.Interpreter.getMethod(Interpreter.scala:221)
    at dotty.tools.dotc.quoted.Interpreter.interpretedStaticMethodCall(Interpreter.scala:173)
    at dotty.tools.dotc.quoted.Interpreter.interpretTree(Interpreter.scala:76)
    at dotty.tools.dotc.transform.Splicer$SpliceInterpreter.interpretTree(Splicer.scala:247)
    at dotty.tools.dotc.quoted.Interpreter.interpretTree$$anonfun$2(Interpreter.scala:95)
    at dotty.tools.dotc.transform.Splicer$.$anonfun$2(Splicer.scala:60)
    at scala.Option.fold(Option.scala:263)
    at dotty.tools.dotc.transform.Splicer$.splice(Splicer.scala:60)
    at dotty.tools.dotc.inlines.Inliner.dotty$tools$dotc$inlines$Inliner$$expandMacro(Inliner.scala:1042)
    at dotty.tools.dotc.inlines.Inliner$InlineTyper.typedApply(Inliner.scala:818)
    at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2928)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2991)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:126)
    at dotty.tools.dotc.inlines.Inliner$InlineTyper.typedUnadapted(Inliner.scala:904)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3058)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3062)
    at dotty.tools.dotc.typer.ReTyper.typedTyped(ReTyper.scala:64)
    at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2933)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2991)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:126)
    at dotty.tools.dotc.inlines.Inliner$InlineTyper.typedUnadapted(Inliner.scala:904)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3058)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3055)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3062)
    at dotty.tools.dotc.inlines.Inliner.inlined(Inliner.scala:671)
    at dotty.tools.dotc.inlines.Inlines$InlineCall.expand(Inlines.scala:444)
    at dotty.tools.dotc.inlines.Inlines$.inlineCall(Inlines.scala:151)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:99)
    at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1478)
    at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:73)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:93)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1228)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1228)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1230)
    at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:64)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:115)
    at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1483)
    at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:73)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:93)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.loop$2(tpd.scala:1228)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1228)
    at dotty.tools.dotc.ast.tpd$TreeMapWithPreciseStatContexts.transformStats(tpd.scala:1230)
    at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1491)
    at dotty.tools.dotc.ast.TreeMapWithImplicits.transform(TreeMapWithImplicits.scala:73)
    at dotty.tools.dotc.transform.Inlining$InliningTreeMap.transform(Inlining.scala:105)
    at dotty.tools.dotc.transform.Inlining$$anon$2.transform(Inlining.scala:62)
    at dotty.tools.dotc.transform.MacroTransform.run(MacroTransform.scala:18)
    at dotty.tools.dotc.transform.Inlining.run(Inlining.scala:34)
    at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:324)
    at scala.collection.immutable.List.map(List.scala:250)
    at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:328)
    at dotty.tools.dotc.transform.Inlining.runOn(Inlining.scala:38)
    at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:247)
    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:1321)
    at dotty.tools.dotc.Run.runPhases$1(Run.scala:263)
    at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:271)
    at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:280)
    at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:280)
    at dotty.tools.dotc.Run.compileSources(Run.scala:195)
    at dotty.tools.dotc.Run.compile(Run.scala:179)
    at dotty.tools.dotc.Driver.doCompile(Driver.scala:35)
    at dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:88)
    at dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
    at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.compileSources$1(BloopHighLevelCompiler.scala:133)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.$anonfun$compile$7(BloopHighLevelCompiler.scala:155)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.$anonfun$compile$1(BloopHighLevelCompiler.scala:71)
    at bloop.tracing.BraveTracer.traceInternal(BraveTracer.scala:67)
    at bloop.tracing.BraveTracer.trace(BraveTracer.scala:41)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.timed$1(BloopHighLevelCompiler.scala:70)
    at sbt.internal.inc.bloop.internal.BloopHighLevelCompiler.$anonfun$compile$6(BloopHighLevelCompiler.scala:155)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:81)
    at monix.eval.internal.TaskRestartCallback.syncOnSuccess(TaskRestartCallback.scala:101)
    at monix.eval.internal.TaskRestartCallback.onSuccess(TaskRestartCallback.scala:74)
    at monix.eval.internal.TaskExecuteOn$AsyncRegister$$anon$1.run(TaskExecuteOn.scala:71)
    at monix.execution.internal.InterceptRunnable.run(InterceptRunnable.scala:27)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ClassNotFoundException: besom.internal.Context
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:440)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 89 more
```
@tgodzik tgodzik merged commit 1b24bf2 into scala-cli:main Dec 6, 2023
13 checks passed
@tgodzik tgodzik deleted the compiler-error branch December 6, 2023 15:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant