Compiler AssertionError in 2.9.0.RC4

6 views
Skip to first unread message

Scott Morrison

unread,
May 11, 2011, 3:19:42 AM5/11/11
to scala-user
Hi all,

the following breaks the compiler, all the way up to 2.9.0.RC4. I'm
not sure if it's a known problem or not; if someone can tell me I'm
happy to file an issue if appropriate.

----
object SubList {
implicit def sublistable[A](x: List[A]) = new SubListable(x)
class SubListable[A](x: List[A]) {
def isSubListOf(y: List[A]) = {
x match {
case Nil => true
case h :: t => y.contains(h) &&
(t.isSubListOf(y.drop(y.indexOf(h) + 1)))
}
}
}
}
----

Compiling this I get

---
java.lang.AssertionError: assertion failed: y.indexOf(h).$plus(1)
at scala.Predef$.assert(Predef.scala:103)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:236)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$1.apply(SuperAccessors.scala:48)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$1.apply(SuperAccessors.scala:45)
at scala.Tuple2$Zipped$$anonfun$map$1.apply(Tuple2.scala:65)
at scala.Tuple2$Zipped$$anonfun$map$1.apply(Tuple2.scala:63)
at scala.collection.LinearSeqOptimized
$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.Tuple2$Zipped.map(Tuple2.scala:63)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transformArgs(SuperAccessors.scala:45)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:237)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$transformArgs$1.apply(SuperAccessors.scala:50)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$transformArgs$1.apply(SuperAccessors.scala:50)
at scala.collection.TraversableLike$$anonfun$map
$1.apply(TraversableLike.scala:194)
at scala.collection.TraversableLike$$anonfun$map
$1.apply(TraversableLike.scala:194)
at scala.collection.LinearSeqOptimized
$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:
194)
at scala.collection.immutable.List.map(List.scala:45)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transformArgs(SuperAccessors.scala:50)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:237)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$1.apply(SuperAccessors.scala:48)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$1.apply(SuperAccessors.scala:45)
at scala.Tuple2$Zipped$$anonfun$map$1.apply(Tuple2.scala:65)
at scala.Tuple2$Zipped$$anonfun$map$1.apply(Tuple2.scala:63)
at scala.collection.LinearSeqOptimized
$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.Tuple2$Zipped.map(Tuple2.scala:63)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transformArgs(SuperAccessors.scala:45)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:237)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:147)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformCaseDefs
$1.apply(Trees.scala:885)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformCaseDefs
$1.apply(Trees.scala:885)
at scala.collection.immutable.List.loop$1(List.scala:117)
at scala.collection.immutable.List.mapConserve(List.scala:133)
at scala.tools.nsc.ast.Trees
$Transformer.transformCaseDefs(Trees.scala:885)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:823)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.transform(TypingTransformers.scala:53)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:243)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform
$5.apply(Trees.scala:783)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform
$5.apply(Trees.scala:781)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.atOwner(SuperAccessors.scala:257)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:780)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.transform(TypingTransformers.scala:53)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:243)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformTrees
$1.apply(Trees.scala:873)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformTrees
$1.apply(Trees.scala:873)
at scala.collection.immutable.List.loop$1(List.scala:117)
at scala.collection.immutable.List.mapConserve(List.scala:133)
at scala.tools.nsc.ast.Trees$Transformer.transformTrees(Trees.scala:
873)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$4.apply(SuperAccessors.scala:185)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$4.apply(SuperAccessors.scala:185)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.atOwner(SuperAccessors.scala:257)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:185)
at scala.tools.nsc.ast.Trees
$Transformer.transformTemplate(Trees.scala:875)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform
$2.apply(Trees.scala:767)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform
$2.apply(Trees.scala:766)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.atOwner(SuperAccessors.scala:257)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:765)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.transform(TypingTransformers.scala:53)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:172)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformTrees
$1.apply(Trees.scala:873)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformTrees
$1.apply(Trees.scala:873)
at scala.collection.immutable.List.loop$1(List.scala:117)
at scala.collection.immutable.List.mapConserve(List.scala:133)
at scala.tools.nsc.ast.Trees$Transformer.transformTrees(Trees.scala:
873)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$4.apply(SuperAccessors.scala:185)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer$
$anonfun$4.apply(SuperAccessors.scala:185)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.atOwner(SuperAccessors.scala:257)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:185)
at scala.tools.nsc.ast.Trees
$Transformer.transformTemplate(Trees.scala:875)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform
$3.apply(Trees.scala:772)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform
$3.apply(Trees.scala:771)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.atOwner(SuperAccessors.scala:257)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:770)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.transform(TypingTransformers.scala:53)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:175)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats
$1.apply(Trees.scala:891)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats
$1.apply(Trees.scala:889)
at scala.collection.immutable.List.loop$1(List.scala:117)
at scala.collection.immutable.List.mapConserve(List.scala:133)
at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:
889)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform
$1.apply(Trees.scala:761)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform
$1.apply(Trees.scala:761)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.atOwner(SuperAccessors.scala:257)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:760)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.scala$tools$nsc$transform$TypingTransformers
$TypingTransformer$$super$transform(TypingTransformers.scala:49)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$
$anonfun$transform$2.apply(TypingTransformers.scala:51)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$
$anonfun$transform$2.apply(TypingTransformers.scala:51)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:38)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.atOwner(TypingTransformers.scala:31)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.atOwner(SuperAccessors.scala:257)
at scala.tools.nsc.transform.TypingTransformers
$TypingTransformer.transform(TypingTransformers.scala:51)
at scala.tools.nsc.typechecker.SuperAccessors
$SuperAccTransformer.transform(SuperAccessors.scala:243)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:
892)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:
30)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase
$1.apply(Global.scala:326)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase
$1.apply(Global.scala:326)
at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:47)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:326)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run
$1.apply(Global.scala:294)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run
$1.apply(Global.scala:294)
at scala.collection.Iterator$class.foreach(Iterator.scala:652)
at scala.collection.mutable.ListBuffer$$anon
$1.foreach(ListBuffer.scala:311)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:294)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:949)
at scala.tools.nsc.Global$Run.compile(Global.scala:1034)
at xsbt.CompilerInterface.run(CompilerInterface.scala:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:597)
at xsbt.AnalyzingCompiler.call(AnalyzingCompiler.scala:40)
at xsbt.AnalyzingCompiler.apply(AnalyzingCompiler.scala:18)
at sbt.Compile.processScala(Compile.scala:76)
at sbt.CompilerCore$$anonfun$1.apply(Compile.scala:27)
at sbt.CompilerCore$$anonfun$1.apply(Compile.scala:27)
at sbt.CompilerCore$$anonfun$process$1$1.apply(Compile.scala:22)
at sbt.CompilerCore$$anonfun$process$1$1.apply(Compile.scala:22)
at sbt.CompilerCore$$anonfun$doCompile$3.apply(Compile.scala:45)
at sbt.CompilerCore$$anonfun$doCompile$3.apply(Compile.scala:42)
at scala.Option.orElse(Option.scala:102)
at sbt.CompilerCore.doCompile(Compile.scala:41)
at sbt.CompilerCore.apply(Compile.scala:29)
at sbt.AbstractCompileConditional.run$1(Conditional.scala:341)
at sbt.AbstractCompileConditional$$anonfun$3.apply(Conditional.scala:
344)
at sbt.AbstractCompileConditional$$anonfun$3.apply(Conditional.scala:
344)
at sbt.classfile.Analyze$.apply(Analyze.scala:110)
at sbt.AbstractCompileConditional.execute(Conditional.scala:344)
at sbt.Conditional$class.run(Conditional.scala:43)
at sbt.AbstractCompileConditional.run(Conditional.scala:231)
at sbt.BasicScalaProject.sbt$BasicScalaProject$
$doCompile(DefaultProject.scala:259)
at sbt.BasicScalaProject$$anonfun$compileAction
$1.apply(DefaultProject.scala:273)
at sbt.BasicScalaProject$$anonfun$compileAction
$1.apply(DefaultProject.scala:273)
at sbt.TaskManager$Task.invoke(TaskManager.scala:62)
at sbt.impl.RunTask.doRun$1(RunTask.scala:77)
at sbt.impl.RunTask.runTask(RunTask.scala:85)
at sbt.impl.RunTask.run(RunTask.scala:32)
at sbt.impl.RunTask$.apply(RunTask.scala:17)
at sbt.impl.RunTask$.apply(RunTask.scala:16)
at sbt.Project$class.run(Project.scala:98)
at sbt.Project$class.act(Project.scala:129)
at sbt.BasicScalaProject.act(DefaultProject.scala:21)
at sbt.xMain$$anonfun$8.apply(Main.scala:512)
at sbt.xMain$$anonfun$8.apply(Main.scala:512)
at sbt.xMain.withAction(Main.scala:545)
at sbt.xMain.sbt$xMain$$handleAction(Main.scala:512)
at sbt.xMain.handleCommand(Main.scala:502)
at sbt.xMain.processAction(Main.scala:441)
at sbt.xMain.process$1(Main.scala:257)
at sbt.xMain$Continue$1.apply(Main.scala:132)
at sbt.xMain.run$1(Main.scala:136)
at sbt.xMain.processArguments(Main.scala:266)
at sbt.xMain.startProject(Main.scala:107)
at sbt.xMain.run(Main.scala:84)
at sbt.xMain.run0$1(Main.scala:35)
at sbt.xMain.run(Main.scala:42)
at xsbt.boot.Launch$.run(Launch.scala:53)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:42)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:42)
at xsbt.boot.Launch$.launch(Launch.scala:57)
at xsbt.boot.Launch$.explicit(Launch.scala:42)
at xsbt.boot.Launch$.initialized(Launch.scala:38)
at xsbt.boot.Launch$.parsed(Launch.scala:31)
at xsbt.boot.Launch$.configured(Launch.scala:21)
at xsbt.boot.Launch$.apply(Launch.scala:16)
at xsbt.boot.Launch$.apply(Launch.scala:13)
at xsbt.boot.Boot$.runImpl(Boot.scala:24)
at xsbt.boot.Boot$.run(Boot.scala:19)
at xsbt.boot.Boot$.main(Boot.scala:15)
at xsbt.boot.Boot.main(Boot.scala)
Error during sbt execution: java.lang.AssertionError: assertion
failed: y.indexOf(h).$plus(1)
---


I'm aware that this code "shouldn't work", and that I can work around
this problem by writing something more sensible, e.g.
---
object SubList {
implicit def sublistable[A](x: List[A]) = new SubListable(x)
class SubListable[A](x: List[A]) {
def isSubListOf(y: List[A]): Boolean = {
x match {
case Nil => true
case h :: t => y.contains(h) && (new
SubListable(t).isSubListOf(y.drop(y.indexOf(h) + 1)))
}
}
}
}
---
Nevertheless, my understanding is that assertion errors in the
compiler are generally worth reporting.

thanks,
Scott Morrison

Ismael Juma

unread,
May 11, 2011, 4:51:57 AM5/11/11
to Scott Morrison, scala-user
On Wed, May 11, 2011 at 8:19 AM, Scott Morrison
<scott.m...@gmail.com> wrote:
> the following breaks the compiler, all the way up to 2.9.0.RC4. I'm
> not sure if it's a known problem or not; if someone can tell me I'm
> happy to file an issue if appropriate.

You can search Trac for the exception message and if there are no
results, then there's a good chance it hasn't been reported yet.

Best,
Ismael

Scott Morrison

unread,
May 11, 2011, 12:34:03 PM5/11/11
to Ismael Juma, scala-user
I've reported this as <https://lampsvn.epfl.ch/trac/scala/ticket/4568>.

best,
scott

Reply all
Reply to author
Forward
0 new messages