Skip to content

AssertionError in rebindSuper #9329

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
sir-wabbit opened this issue Jul 9, 2020 · 2 comments · Fixed by #11007
Closed

AssertionError in rebindSuper #9329

sir-wabbit opened this issue Jul 9, 2020 · 2 comments · Fixed by #11007

Comments

@sir-wabbit
Copy link

Minimized code

// AE-ed9d1b1f2a3006febec44cbf09eca6d2226b5b0f
trait Parent {
  def name: String
}
trait Son extends Parent {
  abstract override def name = ""
  def parentName = super.name
}
class GrandSon extends Son

If I remove abstract, I get:

-- Error: test.scala:6:25 ------------------------------------------------------
6 |  def parentName = super.name
  |                   ^^^^^^^^^^
  |method name in trait Parent is accessed from super. It may not be abstract unless it is overridden by a member declared `abstract' and `override'

I think this requires further elaboration 😅 🤔

Output (click arrow to expand)

exception occurred while compiling test.scala
java.lang.AssertionError: assertion failed while compiling test.scala
Exception in thread "main" java.lang.AssertionError: assertion failed
	at dotty.DottyPredef$.assertFail(DottyPredef.scala:16)
	at dotty.tools.dotc.transform.ResolveSuper$.rebindSuper(ResolveSuper.scala:100)
	at dotty.tools.dotc.transform.ResolveSuper.superAccessors$2$$anonfun$2(ResolveSuper.scala:51)
	at scala.collection.immutable.List.map(List.scala:246)
	at dotty.tools.dotc.transform.ResolveSuper.superAccessors$3(ResolveSuper.scala:52)
	at dotty.tools.dotc.transform.ResolveSuper.$anonfun$1(ResolveSuper.scala:54)
	at scala.collection.immutable.List.flatMap(List.scala:293)
	at dotty.tools.dotc.transform.ResolveSuper.transformTemplate(ResolveSuper.scala:54)
	at dotty.tools.dotc.transform.ResolveSuper.transformTemplate(ResolveSuper.scala:42)
	at dotty.tools.dotc.transform.MegaPhase.goTemplate(MegaPhase.scala:971)
	at dotty.tools.dotc.transform.MegaPhase.goTemplate(MegaPhase.scala:972)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:340)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:396)
	at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:251)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:394)
	at dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:404)
	at dotty.tools.dotc.transform.MegaPhase.$anonfun$1(MegaPhase.scala:409)
	at scala.collection.immutable.List.mapConserve(List.scala:472)
	at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:409)
	at dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:356)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:359)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:396)
	at dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:415)
	at dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:427)
	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:318)
	at scala.collection.immutable.List.map(List.scala:246)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:319)
	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:180)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.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:190)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:198)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:64)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:205)
	at dotty.tools.dotc.Run.compileSources(Run.scala:142)
	at dotty.tools.dotc.Run.compile(Run.scala:124)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
	at dotty.tools.dotc.Driver.process(Driver.scala:194)
	at dotty.tools.dotc.Driver.process(Driver.scala:163)
	at dotty.tools.dotc.Driver.process(Driver.scala:175)
	at dotty.tools.dotc.Driver.main(Driver.scala:202)
	at dotty.tools.dotc.Main.main(Main.scala)
@nicolasstucki
Copy link
Contributor

Related issue

trait Parent {
  def name: String
}
trait Son extends Parent {
  abstract override def name: String = ""
  // def parentName = super.name
}
class GrandSon extends Son

Compiles in dotty but fails in scalac. This error would be emitted before the crash.

@som-snytt
Copy link
Contributor

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
}

Reported at scala/bug#12249

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.

4 participants