Skip to content

Adding @specialized annotation crashes the compiler. #6301

@scabug

Description

@scabug

Unfortunately I haven't been able to minimize the problem from my encounter with it in the wild.

Steps to reproduce:

hg clone https://bitbucket.org/scottmorrison/toolkit
hg update -r f7cf0edfbd7c
./sbt compile
# works fine!
hg update -r 16af6ffa2750
./sbt compile
# crashes the compiler!

The difference is a single specialization annotation, per https://bitbucket.org/scottmorrison/toolkit/compare/16af6ffa2750..f7cf0edfbd7c.

The compiler error message is

[error] uncaught exception during compilation: scala.MatchError
[error] {file:/Users/scott/projects/toolkit/}toolkit-algebra/compile:compile: scala.MatchError: (xs: collection.GenIterable)Int <and> (x0: Int, x1: Seq)Int <and> (x: Int, y: Int)Int (of class scala.reflect.internal.Types$OverloadedType)

and the output from last in sbt is

[error] uncaught exception during compilation: scala.MatchError
scala.MatchError: (xs: collection.GenIterable)Int <and> (x0: Int, x1: Seq)Int <and> (x: Int, y: Int)Int (of class scala.reflect.internal.Types$OverloadedType)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transformApplyDynamic(CleanUp.scala:444)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:525)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:25)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:659)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:659)
	at scala.collection.immutable.List.loop$1(List.scala:164)
	at scala.collection.immutable.List.mapConserve(List.scala:180)
	at scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:659)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1160)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:692)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:25)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:659)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:659)
	at scala.collection.immutable.List.loop$1(List.scala:164)
	at scala.collection.immutable.List.mapConserve(List.scala:180)
	at scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:659)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1160)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:692)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:25)
	at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1176)
	at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1174)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1173)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:692)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:25)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:659)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:659)
	at scala.collection.immutable.List.loop$1(List.scala:164)
	at scala.collection.immutable.List.mapConserve(List.scala:180)
	at scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:659)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.scala$tools$nsc$transform$CleanUp$CleanUpTransformer$$transformTemplate(CleanUp.scala:54)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:538)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:25)
	at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:661)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1221)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1220)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1219)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:692)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:25)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:677)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:675)
	at scala.collection.immutable.List.loop$1(List.scala:164)
	at scala.collection.immutable.List.mapConserve(List.scala:180)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:675)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transformStats(CleanUp.scala:793)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transformStats(CleanUp.scala:25)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1239)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1239)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1238)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:692)
	at scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:25)
	at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:227)
	at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
	at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:455)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:422)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:422)
	at scala.collection.Iterator$class.foreach(Iterator.scala:726)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1155)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:422)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1566)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1540)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1536)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1646)
	at xsbt.CompilerInterface.run(CompilerInterface.scala:87)
	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 sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:57)
	at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:29)
	at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:25)
	at sbt.AggressiveCompile$$anonfun$5.compileScala$1(AggressiveCompile.scala:67)
	at sbt.AggressiveCompile$$anonfun$5.apply(AggressiveCompile.scala:79)
	at sbt.AggressiveCompile$$anonfun$5.apply(AggressiveCompile.scala:57)
	at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:21)
	at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:19)
	at sbt.inc.Incremental$.cycle(Incremental.scala:33)
	at sbt.inc.Incremental$.compile(Incremental.scala:20)
	at sbt.inc.IncrementalCompile$.apply(Compile.scala:17)
	at sbt.AggressiveCompile.compile2(AggressiveCompile.scala:87)
	at sbt.AggressiveCompile.compile1(AggressiveCompile.scala:41)
	at sbt.AggressiveCompile.apply(AggressiveCompile.scala:28)
	at sbt.Compiler$.apply(Compiler.scala:107)
	at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:479)
	at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:479)
	at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:473)
	at sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:473)
	at scala.Function1$$anonfun$compose$1.apply(Function1.scala:41)
	at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$11.apply(Structure.scala:295)
	at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$11.apply(Structure.scala:295)
	at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
	at sbt.std.Transform$$anon$5.work(System.scala:67)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:221)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:221)
	at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
	at sbt.Execute.work(Execute.scala:227)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:221)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:221)
	at sbt.CompletionService$$anon$1$$anon$2.call(CompletionService.scala:26)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
[error] {file:/Users/scott/projects/toolkit/}toolkit-algebra/compile:compile: scala.MatchError: (xs: collection.GenIterable)Int <and> (x0: Int, x1: Seq)Int <and> (x: Int, y: Int)Int (of class scala.reflect.internal.Types$OverloadedType)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions