From 037705cc96c2d764cc96f1f07155f3c2eb03ae57 Mon Sep 17 00:00:00 2001 From: Jack Koenig Date: Thu, 20 Jun 2024 14:43:54 -0700 Subject: [PATCH] Initialize scala.util.control.NonFatal in Builder Chisel includes logic to trim NonFatal stack traces. OutOfMemoryErrors (e.g. from running out of heap or stack) can cause weird issues where because the JVM is out of memory, scala.util.control.NonFatal cannot be loaded to compare to and then the JVM masks the real OutOfMemoryError by throwing a LinkageError. --- core/src/main/scala/chisel3/internal/Builder.scala | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/chisel3/internal/Builder.scala b/core/src/main/scala/chisel3/internal/Builder.scala index 9232e1e59a5..4af30ea4dbf 100644 --- a/core/src/main/scala/chisel3/internal/Builder.scala +++ b/core/src/main/scala/chisel3/internal/Builder.scala @@ -1048,8 +1048,12 @@ private[chisel3] object Builder extends LazyLogging { dynamicContext: DynamicContext ): (Circuit, T) = { dynamicContextVar.withValue(Some(dynamicContext)) { - ViewParent: Unit // Must initialize the singleton in a Builder context or weird things can happen - // in tiny designs/testcases that never access anything in chisel3.internal + // Must initialize the singleton in a Builder context or weird things can happen + // in tiny designs/testcases that never access anything in chisel3.internal. + ViewParent: Unit + // Must initialize the singleton or OutOfMemoryErrors and StackOverflowErrors will instead report as + // "java.lang.NoClassDefFoundError: Could not initialize class scala.util.control.NonFatal$". + scala.util.control.NonFatal: Unit logger.info("Elaborating design...") val mod = try {