Skip to content

Trivial inline identity function causes runtime NoClassDefFound error in resulting code #23279

Open
@neko-kai

Description

@neko-kai
Contributor

Compiler version

3.3.6, 3.7.0 and 3.7.1-RC2

Minimized code

inline def simpleInlineWrap(f: => Any): Unit = f

@main def main(): Unit = {
  simpleInlineWrap {
    object lifecycle {
      object Lifecycle {
        trait FromZIO
      }
    }
    object defn {
      val Lifecycle: lifecycle.Lifecycle.type = lifecycle.Lifecycle
    }
    val xa: defn.Lifecycle.type = defn.Lifecycle
  }
}

https://scastie.scala-lang.org/fcE9r7cwQBSw7m5XwrrR1w - Scastie running on 3.7.1-RC2

Output

java.lang.NoClassDefFoundError: main$package$_$lifecycle$Lifecycle$
	at main$package$.f$proxy1$1(main.scala:13)
	at main$package$.main(main.scala:4)
	at main.main(main.scala:3)

Expectation

Expected not to throw NoClassDefFound error. Removing inline from simpleInlineWrap causes the code to work as expected.

NB: encountered when using ScalaTest, which at some point started wrapping all user tests via inline functions

Activity

som-snytt

som-snytt commented on May 28, 2025

@som-snytt
Contributor

The working case at flatten has

        val xa:
          i23279$package$lifecycle$2.this.i23279$package$lifecycle$2$Lifecycle
           = this.defn$1(defn$lzy1, lifecycle$lzy1).Lifecycle()

before flatten

        val xa: lifecycle$2.this.Lifecycle =
          this.defn$1(defn$lzy1, lifecycle$lzy1).Lifecycle()

The broken proxy has

        val xa: i23279$package.lifecycle.i23279$package$_$lifecycle$Lifecycle =
          this.defn$1(defn$lzy1, lifecycle$lzy1).Lifecycle().asInstanceOf[
            i23279$package.lifecycle.i23279$package$_$lifecycle$Lifecycle]

before flatten

        val xa: i23279$package.lifecycle.Lifecycle =
          this.defn$1(defn$lzy1, lifecycle$lzy1).Lifecycle().asInstanceOf[
            i23279$package.lifecycle.Lifecycle]

where it should be lifecycle$2 after lambdalift.

added and removed
stat:needs triageEvery issue needs to have an "area" and "itype" label
on May 29, 2025
self-assigned this
on Jun 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @som-snytt@neko-kai@Gedochao

      Issue actions

        Trivial inline identity function causes runtime `NoClassDefFound` error in resulting code · Issue #23279 · scala/scala3