question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Scala.js 1.4.0 breaks linking of fields with type Nothing

See original GitHub issue

This Scala 3 code compiles and links using ScalaJS 1.3.1 and the latest Dotty nightly build, but fails to link using ScalaJS 1.4.0:

package problem


object Other:
  lazy val a = "hello"
  
  // this line causes linking to fail with ScalaJS 1.4.0, but not with 1.3.1
  lazy val b = ???


object Main:
  val view = Other.a

  def main(args: Array[String]): Unit = ()

Output of Sbt build using ScalaJS 1.4.0 under Windows 10 20H2:

[info] welcome to sbt 1.4.6 (AdoptOpenJDK Java 11.0.9)
[info] loading global plugins from C:\Users\djn\.sbt\1.0\plugins
[info] loading settings for project muve-build from plugins.sbt ...
[info] loading project definition from C:\Git\Muve\project
[info] loading settings for project muve from build.sbt ...
Fetching latest Dotty nightly version...
Latest Dotty nightly build version: 3.0.0-RC1-bin-20210111-0f1d350-NIGHTLY
[info] set current project to ScalaJS Linker Problem (in build file:/C:/Git/Muve/)
[info] sbt server started at local:sbt-server-23257b54281723eb2d64
[info] started sbt server
sbt:ScalaJS Linker Problem> clean
[success] Total time: 0 s, completed 13 Jan 2021, 00:32:35
sbt:ScalaJS Linker Problem> fastLinkJS
[warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.
[info] compiling 1 Scala source to C:\Git\Muve\target\scala-3.0.0-RC1\classes ...
[info] Fast optimizing C:\Git\Muve\target\scala-3.0.0-RC1\scalajs-linker-problem-fastopt
[error] stack trace is suppressed; run last Compile / fastLinkJS for the full output
[error] (Compile / fastLinkJS) java.lang.IllegalArgumentException: cannot generate a zero for NothingType
[error] Total time: 6 s, completed 13 Jan 2021, 00:32:43

Full exception output:

sbt:ScalaJS Linker Problem> last Compile / fastLinkJS
[info] Fast optimizing C:\Git\Muve\target\scala-3.0.0-RC1\scalajs-linker-problem-fastopt
[debug] Linker: Compute reachability: 130613 us
[debug] Linker: Assemble LinkedClasses: 14873 us
[debug] Linker: 189468 us
[debug] Optimizer: Batch mode: true
[debug] Optimizer: Incremental part: 52768 us
[debug] Optimizer: Optimizing 211 methods.
[debug] Optimizer: Optimizer part: 144326 us
[debug] Optimizer: 201273 us
[debug] Refiner: Compute reachability: 17781 us
[debug] Refiner: Assemble LinkedClasses: 2146 us
[debug] Refiner: 103948 us
[debug] Module Splitter: Calculate Dependency Info: 3563 us
[debug] Module Splitter: Analyze Modules: 793 us
[debug] Module Splitter: Assemble Modules: 7452 us
[debug] Module Splitter: 13887 us
[debug] Emitter: Class tree cache stats: reused: 0 -- invalidated: 9
[debug] Emitter: Method tree cache stats: reused: 0 -- invalidated: 11
[error] java.lang.IllegalArgumentException: cannot generate a zero for NothingType
[error]         at org.scalajs.linker.backend.emitter.SJSGen.genZeroOfPrim(SJSGen.scala:79)
[error]         at org.scalajs.linker.backend.emitter.SJSGen.genZeroOf(SJSGen.scala:48)
[error]         at org.scalajs.linker.backend.emitter.ClassEmitter.$anonfun$genFieldDefsOfScalaClass$2(ClassEmitter.scala:407)
[error]         at scala.collection.TraversableLike$WithFilter.$anonfun$map$2(TraversableLike.scala:874)
[error]         at scala.collection.immutable.List.foreach(List.scala:431)
[error]         at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:873)
[error]         at org.scalajs.linker.backend.emitter.ClassEmitter.genFieldDefsOfScalaClass(ClassEmitter.scala:401)
[error]         at org.scalajs.linker.backend.emitter.ClassEmitter.$anonfun$genJSConstructorFun$1(ClassEmitter.scala:351)
[error]         at scala.collection.immutable.List.flatMap(List.scala:366)
[error]         at org.scalajs.linker.backend.emitter.ClassEmitter.genJSConstructorFun(ClassEmitter.scala:350)
[error]         at org.scalajs.linker.backend.emitter.ClassEmitter.genES5Constructor(ClassEmitter.scala:225)
[error]         at org.scalajs.linker.backend.emitter.ClassEmitter.genConstructor(ClassEmitter.scala:186)
[error]         at org.scalajs.linker.backend.emitter.Emitter.$anonfun$genClass$10(Emitter.scala:438)
[error]         at org.scalajs.linker.backend.emitter.Emitter$MethodCache.getOrElseUpdate(Emitter.scala:668)
[error]         at org.scalajs.linker.backend.emitter.Emitter.genClass(Emitter.scala:438)
[error]         at org.scalajs.linker.backend.emitter.Emitter.$anonfun$emitOnce$4(Emitter.scala:180)
[error]         at scala.collection.immutable.List.map(List.scala:297)
[error]         at org.scalajs.linker.backend.emitter.Emitter.$anonfun$emitOnce$2(Emitter.scala:180)
[error]         at scala.collection.immutable.List.map(List.scala:293)
[error]         at org.scalajs.linker.backend.emitter.Emitter.$anonfun$emitOnce$1(Emitter.scala:177)
[error]         at org.scalajs.logging.Logger.time(Logger.scala:42)
[error]         at org.scalajs.logging.Logger.time$(Logger.scala:40)
[error]         at org.scalajs.sbtplugin.Loggers$SbtLoggerWrapper.time(Loggers.scala:19)
[error]         at org.scalajs.linker.backend.emitter.Emitter.emitOnce(Emitter.scala:181)
[error]         at org.scalajs.linker.backend.emitter.Emitter.emitAvoidGlobalClash(Emitter.scala:151)
[error]         at org.scalajs.linker.backend.emitter.Emitter.emitInternal(Emitter.scala:127)
[error]         at org.scalajs.linker.backend.emitter.Emitter.emit(Emitter.scala:79)
[error]         at org.scalajs.linker.backend.BasicLinkerBackend.$anonfun$emit$1(BasicLinkerBackend.scala:57)
[error]         at org.scalajs.logging.Logger.time(Logger.scala:42)
[error]         at org.scalajs.logging.Logger.time$(Logger.scala:40)
[error]         at org.scalajs.sbtplugin.Loggers$SbtLoggerWrapper.time(Loggers.scala:19)
[error]         at org.scalajs.linker.backend.BasicLinkerBackend.emit(BasicLinkerBackend.scala:57)
[error]         at org.scalajs.linker.standard.StandardLinkerImpl.$anonfun$link$2(StandardLinkerImpl.scala:47)
[error]         at scala.concurrent.Future.$anonfun$flatMap$1(Future.scala:307)
[error]         at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:41)
[error]         at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
[error]         at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
[error]         at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
[error]         at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
[error]         at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
[error]         at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
[error]         at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
[error] (Compile / fastLinkJS) java.lang.IllegalArgumentException: cannot generate a zero for NothingType

Sbt, JDK, and Dotty versions are shown in the above output. Other relevant files are shown below:

plugins.sbt:

addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.1")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.4.0")

build.sbt:

enablePlugins(ScalaJSPlugin)

name := "ScalaJS Linker Problem"
scalaVersion := dottyLatestNightlyBuild.get

scalaJSUseMainModuleInitializer := true

Issue Analytics

  • State:closed
  • Created 3 years ago
  • Comments:7 (7 by maintainers)

github_iconTop GitHub Comments

1reaction
sjrdcommented, Jan 13, 2021

Workaround

Give an appropriate explicit type to the lazy val if its rhs makes it infer as Nothing:

  lazy val b: String = ???
1reaction
sjrdcommented, Jan 13, 2021

Thank you for the report!

Read more comments on GitHub >

github_iconTop Results From Across the Web

Announcing Scala.js 1.5.0
Notably, this allows to declare types for JS functions with varargs. ... #4370 Scala.js 1.4.0 breaks linking of fields with type Nothing ......
Read more >
Unexpected error when compiling root after upgrading to 1.4.0
I killed the bloop process listed by ps aux | grep bloop. I removed the .bloop folder. I ran sbt bloopInstall on a...
Read more >
Hands-on Scala.js - Haoyi's Programming Blog
js is a compiler that compiles Scala source code to equivalent Javascript code. That lets you write Scala code that you can run...
Read more >
IO tools (text, CSV, HDF5, …) — pandas 1.5.2 documentation
Deprecated since version 1.4.0: Append .squeeze("columns") to the call to {func_name} to squeeze ... dtypeType name or dict of column -> type, default...
Read more >
Backbone.js
Backbone.js gives structure to web applications by providing models with ... In a finished Backbone app, you don't have to write the glue...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found