Skip to content

AssertionError in rebindSuper #11170

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

Closed
som-snytt opened this issue Jan 19, 2021 · 1 comment · Fixed by #14893
Closed

AssertionError in rebindSuper #11170

som-snytt opened this issue Jan 19, 2021 · 1 comment · Fixed by #14893

Comments

@som-snytt
Copy link
Contributor

som-snytt commented Jan 19, 2021

Minimized code

The following compiles in a single package or removing protected modifier but fails in this form:

package apackage {

  abstract class A {
    protected val x: Int
  }
  abstract class A2 {
    val x: Int
  }
}

package bpackage {
  import apackage._

  trait B extends A {
    println(x)
  }
  trait B2 extends A2 {
    println(x)
  }
}

package cpackage {
  import apackage._
  import bpackage._

  case class C(override protected val x: Int) extends A with B
  case class C2(override val x: Int) extends A2 with B2
}

Output (click arrow to expand)

  snips ~/projects/dotty/bin/scalac -d /tmp i9329.scala
exception occurred while compiling i9329.scala
java.lang.AssertionError: assertion failed: cannot rebind method bpackage$B$$super$x, bpackage$B$$super$x x while compiling i9329.scala
Exception in thread "main" java.lang.AssertionError: assertion failed: cannot rebind method bpackage$B$$super$x, bpackage$B$$super$x x
        at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
        at dotty.tools.dotc.transform.ResolveSuper$.rebindSuper(ResolveSuper.scala:115)
        at dotty.tools.dotc.transform.ResolveSuper.superAccessors$2$$anonfun$2(ResolveSuper.scala:52)
        at scala.collection.immutable.List.map(List.scala:246)
        at dotty.tools.dotc.transform.ResolveSuper.superAccessors$3(ResolveSuper.scala:53)
        at dotty.tools.dotc.transform.ResolveSuper.$anonfun$1(ResolveSuper.scala:55)
        at scala.collection.immutable.List.flatMap(List.scala:293)
        at dotty.tools.dotc.transform.ResolveSuper.transformTemplate(ResolveSuper.scala:55)
        at dotty.tools.dotc.transform.ResolveSuper.transformTemplate(ResolveSuper.scala:43)
        at dotty.tools.dotc.transform.MegaPhase.goTemplate(MegaPhase.scala:1004)
        at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:363)
        at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:429)
        at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:256)
        at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:427)
        at dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:437)
        at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:442)
        at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:442)
        at dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:382)
        at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:385)
        at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:429)
        at dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:439)
        at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:442)
        at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:442)
        at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:442)
        at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:442)
        at dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:382)
        at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:385)
        at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:429)
        at dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:448)
        at dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:460)
        at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:300)
        at scala.collection.immutable.List.map(List.scala:246)
        at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:301)
        at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
        at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
        at dotty.tools.dotc.Run.runPhases$5(Run.scala:195)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
        at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67)
        at dotty.tools.dotc.Run.compileUnits(Run.scala:210)
        at dotty.tools.dotc.Run.compileSources(Run.scala:146)
        at dotty.tools.dotc.Run.compile(Run.scala:130)
        at dotty.tools.dotc.Driver.doCompile(Driver.scala:39)
        at dotty.tools.dotc.Driver.process(Driver.scala:186)
        at dotty.tools.dotc.Driver.process(Driver.scala:155)
        at dotty.tools.dotc.Driver.process(Driver.scala:167)
        at dotty.tools.dotc.Driver.main(Driver.scala:194)
        at dotty.tools.dotc.Main.main(Main.scala)
Reported at scala/bug#12249

Split from #9329

@bishabosha
Copy link
Member

another example derived from tests/neg/i1240b.scala:

trait T[X] {
  def foo(x: X): X
}
trait U[X] extends T[X] {
  abstract override def foo(x: X): X = super.foo(x)
}
abstract class Test extends U[String]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants