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

Compiler crashes on dependent type in an enum case #8069

Closed
CherryWorm opened this issue Jan 22, 2020 · 0 comments
Closed

Compiler crashes on dependent type in an enum case #8069

CherryWorm opened this issue Jan 22, 2020 · 0 comments

Comments

@CherryWorm
Copy link

minimized code

trait A
  type B

enum Test
  case Test(a: A, b: a.B)
Stack trace
core.compile java.lang.AssertionError: assertion failed: orphan parameter reference: TermParamRef(a)
    dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
    dotty.tools.dotc.core.tasty.TreePickler.pickleNewType(TreePickler.scala:265)
    dotty.tools.dotc.core.tasty.TreePickler.pickleType(TreePickler.scala:140)
    dotty.tools.dotc.core.tasty.TreePickler.pickleNewType(TreePickler.scala:192)
    dotty.tools.dotc.core.tasty.TreePickler.pickleType(TreePickler.scala:140)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:542)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTpt(TreePickler.scala:291)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$37$$anonfun$1(TreePickler.scala:389)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
    scala.collection.immutable.List.foreach(List.scala:305)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$3(TreePickler.scala:389)
    dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:44)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:390)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$36$$anonfun$1(TreePickler.scala:382)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
    scala.collection.immutable.List.foreach(List.scala:305)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$2(TreePickler.scala:382)
    dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:44)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:383)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTreeUnlessEmpty(TreePickler.scala:294)
    dotty.tools.dotc.core.tasty.TreePickler.pickleDef$$anonfun$2(TreePickler.scala:308)
    dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:44)
    dotty.tools.dotc.core.tasty.TreePickler.pickleDef(TreePickler.scala:310)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:504)
    dotty.tools.dotc.core.tasty.TreePickler.pickleStats$$anonfun$2(TreePickler.scala:329)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
    scala.collection.immutable.List.foreach(List.scala:305)
    dotty.tools.dotc.core.tasty.TreePickler.pickleStats(TreePickler.scala:329)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$25(TreePickler.scala:530)
    dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:44)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:531)
    dotty.tools.dotc.core.tasty.TreePickler.pickleDef$$anonfun$2(TreePickler.scala:305)
    dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:44)
    dotty.tools.dotc.core.tasty.TreePickler.pickleDef(TreePickler.scala:310)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:506)
    dotty.tools.dotc.core.tasty.TreePickler.pickleStats$$anonfun$2(TreePickler.scala:329)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
    scala.collection.immutable.List.foreach(List.scala:305)
    dotty.tools.dotc.core.tasty.TreePickler.pickleStats(TreePickler.scala:329)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$25(TreePickler.scala:530)
    dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:44)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:531)
    dotty.tools.dotc.core.tasty.TreePickler.pickleDef$$anonfun$2(TreePickler.scala:305)
    dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:44)
    dotty.tools.dotc.core.tasty.TreePickler.pickleDef(TreePickler.scala:310)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:506)
    dotty.tools.dotc.core.tasty.TreePickler.pickleStats$$anonfun$2(TreePickler.scala:329)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
    scala.collection.immutable.List.foreach(List.scala:305)
    dotty.tools.dotc.core.tasty.TreePickler.pickleStats(TreePickler.scala:329)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$27(TreePickler.scala:540)
    dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:44)
    dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:540)
    dotty.tools.dotc.core.tasty.TreePickler.pickle$$anonfun$1(TreePickler.scala:695)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
    scala.collection.immutable.List.foreach(List.scala:305)
    dotty.tools.dotc.core.tasty.TreePickler.pickle(TreePickler.scala:695)
    dotty.tools.dotc.transform.Pickler.run$$anonfun$10$$anonfun$8(Pickler.scala:63)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
    scala.collection.immutable.List.foreach(List.scala:305)
    dotty.tools.dotc.transform.Pickler.run$$anonfun$2(Pickler.scala:87)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
    scala.collection.immutable.List.foreach(List.scala:305)
    dotty.tools.dotc.transform.Pickler.run(Pickler.scala:87)
    dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:315)
    scala.collection.immutable.List.map(List.scala:219)
    dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:316)
    dotty.tools.dotc.transform.Pickler.runOn(Pickler.scala:91)
    dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:162)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
    dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
    scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
    dotty.tools.dotc.Run.runPhases$5(Run.scala:172)
    dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:180)
    dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:65)
    dotty.tools.dotc.Run.compileUnits(Run.scala:187)
    dotty.tools.dotc.Run.compileSources(Run.scala:124)
    dotty.tools.dotc.Run.compile(Run.scala:107)
    dotty.tools.dotc.Driver.doCompile(Driver.scala:36)
    dotty.tools.dotc.Driver.process(Driver.scala:189)
    dotty.tools.dotc.Main.process(Main.scala)
    xsbt.CachedCompilerImpl.run(CachedCompilerImpl.java:69)
    xsbt.CompilerInterface.run(CompilerInterface.java:41)
    java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
odersky added a commit to dotty-staging/dotty that referenced this issue Jan 22, 2020
This avoids the crash but intorduces an implementation restriction. I have opened
scala#8073, which suggests a full implementation of parameter dependent case classes
so that the restriction can be dropped.
liufengyun added a commit that referenced this issue Jan 23, 2020
Fix #8069: Disallow parameter dependent case classes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants