From 005332da796108315a0145189840a2019c88176c Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 5 Sep 2025 10:04:12 +0200 Subject: [PATCH] fix: avoid cyclic initialisation between `Predef`, `Manifest` and `ManifestFactory` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We get the following warning in the test suite before this change ```scala at 109: Cyclic initialization: object Predef -> object Manifest -> object ManifestFactory -> object Predef. Calling trace: ├── object Manifest { [ Manifest.scala:76 ] │ ^ ├── val Byte: ManifestFactory.ByteManifest = ManifestFactory.Byte [ Manifest.scala:86 ] │ ^^^^^^^^^^^^^^^ ├── object Predef extends LowPriorityImplicits { [ Predef.scala:109 ] │ ^ ├── val Manifest = scala.reflect.Manifest [ Predef.scala:210 ] │ ^^^^^^^^^^^^^^^^^^^^^^ ├── object ManifestFactory { [ Manifest.scala:171 ] │ ^ └── private[this] val ObjectTYPE = classOf[java.lang.Object] [ Manifest.scala:323 ] ``` --- compiler/src/dotty/tools/dotc/transform/init/Objects.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/compiler/src/dotty/tools/dotc/transform/init/Objects.scala b/compiler/src/dotty/tools/dotc/transform/init/Objects.scala index 4d978212d247..44dc1c70c3f9 100644 --- a/compiler/src/dotty/tools/dotc/transform/init/Objects.scala +++ b/compiler/src/dotty/tools/dotc/transform/init/Objects.scala @@ -76,8 +76,12 @@ class Objects(using Context @constructorOnly): val HashMap_EmptyMap: Symbol = immutableHashMap.requiredValue("EmptyMap") val immutableLazyList: Symbol = requiredModule("scala.collection.immutable.LazyList") val LazyList_empty: Symbol = immutableLazyList.requiredValue("_empty") + val ManifestFactory_ObjectTYPE = defn.ManifestFactoryModule.requiredValue("ObjectTYPE") + val ManifestFactory_NothingTYPE = defn.ManifestFactoryModule.requiredValue("NothingTYPE") + val ManifestFactory_NullTYPE = defn.ManifestFactoryModule.requiredValue("NullTYPE") - val allowList: Set[Symbol] = Set(SetNode_EmptySetNode, HashSet_EmptySet, Vector_EmptyIterator, MapNode_EmptyMapNode, HashMap_EmptyMap, LazyList_empty) + val allowList: Set[Symbol] = Set(SetNode_EmptySetNode, HashSet_EmptySet, Vector_EmptyIterator, MapNode_EmptyMapNode, HashMap_EmptyMap, LazyList_empty, + ManifestFactory_ObjectTYPE, ManifestFactory_NothingTYPE, ManifestFactory_NullTYPE) // ----------------------------- abstract domain -----------------------------