Closed scabug closed 13 years ago
Imported From: https://issues.scala-lang.org/browse/SI-2994?orig=1 Reporter: michid4
@paulp said: It is hard to pinpoint this regression because it took a windy path. There are two key inflections. It worked until r17556, and in r17557 started tripping an assertion in the typer:
Exception in thread "main" java.lang.AssertionError: assertion failed
at scala.Predef$$.assert(Predef.scala:87)
at scala.tools.nsc.typechecker.Typers$$Typer.adapt(Typers.scala:742)
at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:3486)
at scala.tools.nsc.typechecker.Typers$$Typer.typedHigherKindedType(Typers.scala:3564)
at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$51.apply(Typers.scala:3164)
at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$51.apply(Typers.scala:3163)
Then after bouncing around a bit, in r18858 it would not compile:
/scala/trac/2994/a.scala:24: error: type arguments [s,z] do not conform to type a's type parameter bounds [s[_ <: Naturals.NAT] <: Naturals.NAT,z <: Naturals.NAT]
type a[s[_ <: NAT] <: NAT, z <: NAT] = n#a[curry[m#a, s]#f, z]
^
one error found
In r18859 it became what is presumably the current crasher.
Exception in thread "main" java.lang.Error: no-symbol does not have owner
at scala.tools.nsc.symtab.Symbols$$NoSymbol$$.owner(Symbols.scala:1870)
at scala.tools.nsc.symtab.Types$$class.isHKSubType0(Types.scala:3746)
at scala.tools.nsc.symtab.SymbolTable.isHKSubType0(SymbolTable.scala:13)
at scala.tools.nsc.symtab.Types$$class.isSubType2(Types.scala:3798)
at scala.tools.nsc.symtab.Types$$class.isSubType0(Types.scala:3782)
at scala.tools.nsc.symtab.SymbolTable.isSubType0(SymbolTable.scala:13)
@adriaanm said: thanks for narrowing it down, Paul It looks like cloning is producing orphans (as one might expect).
Christian Hofer (chmh) said: The following code and its variant cause the same error and look related.
Tested on: 2.8.0Beta1-prerelease and scala-2.8.0.r20879-b20100214020153
object Test {
trait Bar[X[_]]
trait Baz[S[_] <: Bar[S]] {
type Apply[T]
}
trait Foo[V[E[_]]] extends Bar[Baz[V]#Apply]
}
The variant is:
object Test {
trait Bar[X[_]]
trait Qux[S[_] <: Bar[S], T]
trait Baz[S[_] <: Bar[S]] {
type Apply[T] = Qux[S,T]
}
trait Foo[V[E[_]]] extends Bar[Baz[V]#Apply]
}
@adriaanm said: ok, fix will be in trunk later today if my local test suite passes
btw, there are kinding errors in all these examples, for example, for the OP, curry should be defined as:
trait curry[n[_[_], _], s[_]] { type f[z/**/ <: NAT/**/] = n[s, z] }
and in the FooBarBaz example:
trait Foo[/**/V[_] <: Bar[V]/**/] extends Bar[Baz[V]#Apply]
@adriaanm said: (In r21105) closes #2994
make normalize slightly more aggressive in loading symbol info, while tolerating the righteous cycle (use sym.info.typeParameters instead of unsafeParams) this is needed to make sure higher-kinded types have their type parameters (otherwise we'd get a PolyType with NoSymbol for typeParams)
The following type level encoding of multiplication used to work on 2.7. With 2.8 beta 1 the compiler crashes with a
Exception in thread "main" java.lang.Error: no-symbol does not have owner
: