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 chokes on case classes with parameters of type Array[_] #5654
Comments
Imported From: https://issues.scala-lang.org/browse/SI-5654?orig=1 |
@xeno-by said: error:
while compiling: t5654.scala
current phase: constructors
library version: version 2.10.0-20120505-103711-7cac6334d4
compiler version: version 2.10.0-20120505-103711-7cac6334d4
reconstructed args: -Ymacro-debug-lite -deprecation -language:experimental.macros -Yshow-trees-stringified -Yoverride-vars -Xexperimental -Yshow-trees-compact -Yoverride-objects -unchecked -Yinfer-argument-types
uncaught exception during compilation: scala.reflect.internal.Types$TypeError
error: scala.reflect.internal.Types$TypeError: type mismatch;
found : Object
required: Array[Object]
at scala.tools.nsc.typechecker.Contexts$Context.issueCommon(Contexts.scala:363)
at scala.tools.nsc.typechecker.Contexts$Context.issue(Contexts.scala:367)
at scala.tools.nsc.typechecker.ContextErrors$ErrorUtils$.issueTypeError(ContextErrors.scala:78)
at scala.tools.nsc.typechecker.ContextErrors$ErrorUtils$.issueNormalTypeError(ContextErrors.scala:63)
at scala.tools.nsc.typechecker.ContextErrors$TyperContextErrors$TyperErrorGen$.AdaptTypeError(ContextErrors.scala:147)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1188)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5014)
at scala.tools.nsc.typechecker.Typers$Typer.typedAssign$1(Typers.scala:3819)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4718)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5005)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5063)
at scala.tools.nsc.typechecker.Typers$Typer.typedPos(Typers.scala:5067)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.mkAssign$1(Constructors.scala:121)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.copyParam$1(Constructors.scala:128)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer$$anonfun$12.apply(Constructors.scala:267)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer$$anonfun$12.apply(Constructors.scala:258)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:237)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:237)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:77)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:237)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.transformClassTemplate(Constructors.scala:258)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer$$anonfun$transform$1.apply(Constructors.scala:572)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer$$anonfun$transform$1.apply(Constructors.scala:572)
at scala.reflect.api.Trees$class.deriveClassDef(Trees.scala:897)
at scala.reflect.api.Universe.deriveClassDef(Universe.scala:6)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.transform(Constructors.scala:572)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$2.apply(Trees.scala:1567)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$2.apply(Trees.scala:1565)
at scala.collection.immutable.List.loop$1(List.scala:163)
at scala.collection.immutable.List.mapConserve(List.scala:179)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:1565)
at scala.reflect.api.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:1439)
at scala.reflect.api.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:1439)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:1574)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:1438)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.transform(Constructors.scala:574)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:228)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:430)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:396)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:390)
at scala.collection.Iterator$class.foreach(Iterator.scala:724)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1151)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:390)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1344)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1317)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1311)
at scala.tools.nsc.Global$Run.compile(Global.scala:1444)
at scala.tools.nsc.Driver.doCompile(Driver.scala:31)
at scala.tools.nsc.Main$.doCompile(Main.scala:81)
at scala.tools.nsc.Driver.process(Driver.scala:52)
at scala.tools.nsc.Driver.main(Driver.scala:65)
at scala.tools.nsc.Main.main(Main.scala)
Exception in thread "main" scala.reflect.internal.Types$TypeError: type mismatch;
found : Object
required: Array[Object]
at scala.tools.nsc.typechecker.Contexts$Context.issueCommon(Contexts.scala:363)
at scala.tools.nsc.typechecker.Contexts$Context.issue(Contexts.scala:367)
at scala.tools.nsc.typechecker.ContextErrors$ErrorUtils$.issueTypeError(ContextErrors.scala:78)
at scala.tools.nsc.typechecker.ContextErrors$ErrorUtils$.issueNormalTypeError(ContextErrors.scala:63)
at scala.tools.nsc.typechecker.ContextErrors$TyperContextErrors$TyperErrorGen$.AdaptTypeError(ContextErrors.scala:147)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1188)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5014)
at scala.tools.nsc.typechecker.Typers$Typer.typedAssign$1(Typers.scala:3819)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4718)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5005)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5063)
at scala.tools.nsc.typechecker.Typers$Typer.typedPos(Typers.scala:5067)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.mkAssign$1(Constructors.scala:121)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.copyParam$1(Constructors.scala:128)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer$$anonfun$12.apply(Constructors.scala:267)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer$$anonfun$12.apply(Constructors.scala:258)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:237)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:237)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:77)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:237)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.transformClassTemplate(Constructors.scala:258)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer$$anonfun$transform$1.apply(Constructors.scala:572)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer$$anonfun$transform$1.apply(Constructors.scala:572)
at scala.reflect.api.Trees$class.deriveClassDef(Trees.scala:897)
at scala.reflect.api.Universe.deriveClassDef(Universe.scala:6)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.transform(Constructors.scala:572)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$2.apply(Trees.scala:1567)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$2.apply(Trees.scala:1565)
at scala.collection.immutable.List.loop$1(List.scala:163)
at scala.collection.immutable.List.mapConserve(List.scala:179)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:1565)
at scala.reflect.api.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:1439)
at scala.reflect.api.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:1439)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:1574)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:1438)
at scala.tools.nsc.transform.Constructors$ConstructorTransformer.transform(Constructors.scala:574)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:228)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:430)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:396)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:390)
at scala.collection.Iterator$class.foreach(Iterator.scala:724)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1151)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:390)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1344)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1317)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1311)
at scala.tools.nsc.Global$Run.compile(Global.scala:1444)
at scala.tools.nsc.Driver.doCompile(Driver.scala:31)
at scala.tools.nsc.Main$.doCompile(Main.scala:81)
at scala.tools.nsc.Driver.process(Driver.scala:52)
at scala.tools.nsc.Driver.main(Driver.scala:65)
at scala.tools.nsc.Main.main(Main.scala) |
@paulp said: object Foo {
case class Bomb(a: Array[_])
case class Bomb2(a: Array[T] forSome { type T })
class Okay1(a: Array[_])
case class Okay2(s: Seq[_])
} |
@lrytz said: class T(val a: Array[_]) |
@lrytz said (edited on May 10, 2012 12:24:10 PM UTC): The class class T(val a: Array[_$1] forSome { type _$1 }) is de-sugared into class T {
val a: Array[_$1] forSome { type _$1 }
def <init>(a: Array[_$1] forSome { type _$1 }): T = {
T.this.a = a;
// ...
}
} Constructors phase generates the field initialization assignment, type-checking it crashed. The reason:
Why was field This logic in erasure was wrong about judging what is a Java array: it looks at the type argument In the example, the owner happened to be the enclosing package class, and every package class always has the Why is it the enclosing package class? Because class C { class D(val x: C) { class C } } The parameter type In our initial example, because the field definition is type-checked in a context outside |
@paulp said: |
Rob Dickens (robcd) said: |
most recent version tested: 2.9.2-RC3
The text was updated successfully, but these errors were encountered: