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

WIP - Performance improvement to global initialization checker #21514

Draft
wants to merge 27 commits into
base: main
Choose a base branch
from

Conversation

liufengyun
Copy link
Contributor

WIP - Performance improvement to global initialization checker

See test tests/init-global/warn/return2.scala
Otherwise, the following program causes weird address not found error:

    import scala.collection.immutable.HashSet

    object A:
      val a = HashSet(1, 2, 3)

The error looks like the following:

    -- Warning: out/bootstrap/scala2-library-bootstrapped/scala-3.6.0-RC1-bin-SNAPSHOT-nonbootstrapped/src_managed/main/scala-library-src/scala/collection/immutable/ChampCommon.scala:155:24
    155 |    currentStackLevel = currentStackLevel - 1
        |                        ^^^^^^^^^^^^^^^^^
        |[Internal error] Address not found FieldAddr(List(),val currentStackLevel,module class A$). Trace:
        |Calling trace:
        |├── object A:	[ HashSet.scala:3 ]
        |│   ^
        |├── val a = HashSet(1, 2, 3)	[ HashSet.scala:4 ]
        |│           ^^^^^^^^^^^^^^^^
        |├── def apply[A](elems: A*): CC[A] = from(elems)	[ Factory.scala:103 ]
        |│                                    ^^^^^^^^^^^
        |├── def from[A](source: collection.IterableOnce[A]): HashSet[A] =	[ HashSet.scala:1939 ]
        |│   ^
        |├── case _ => (newBuilder[A] ++= source).result()	[ HashSet.scala:1943 ]
        |│              ^^^^^^^^^^^^^^^^^^^^^^^^
        |├── @inline final def ++= (@deprecatedName("xs") elems: IterableOnce[A]): this.type = addAll(elems)	[ Growable.scala:69 ]
        |│                                                                                     ^^^^^^^^^^^^^
        |├── override def addAll(xs: IterableOnce[A]) = {	[ HashSet.scala:2079 ]
        |│   ^
        |├── }	[ HashSet.scala:2096 ]
        |│    ^
        |├── new ChampBaseIterator[A, SetNode[A]](hm.rootNode) {	[ HashSet.scala:2083 ]
        |│   ^
        |├── while(hasNext) {	[ HashSet.scala:2084 ]
        |│         ^^^^^^^
        |├── final def hasNext = (currentValueCursor < currentValueLength) || searchNextValueNode()	[ ChampCommon.scala:185 ]
        |│                                                                    ^^^^^^^^^^^^^^^^^^^^^
        |├── private final def searchNextValueNode(): Boolean = {	[ ChampCommon.scala:162 ]
        |│   ^
        |├── popNode()	[ ChampCommon.scala:178 ]
        |│   ^^^^^^^^^
        |├── private final def popNode(): Unit = {	[ ChampCommon.scala:154 ]
        |│   ^
        |└── currentStackLevel = currentStackLevel - 1	[ ChampCommon.scala:155 ]
        |                        ^^^^^^^^^^^^^^^^^
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.

1 participant