summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala2
-rw-r--r--test/files/neg/t4044.check16
-rw-r--r--test/files/neg/t4044.scala16
3 files changed, 33 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala
index 9e97fa7aa7..be51e10659 100644
--- a/src/compiler/scala/tools/nsc/symtab/Types.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Types.scala
@@ -5486,7 +5486,7 @@ A type's typeSymbol should never be inspected directly.
def stricterBounds(as: Iterable[(Symbol, Symbol)]) { if(explainErrors) _stricterBounds ++= as }
for ((hkarg, hkparam) <- hkargs zip hkparams) {
- if (hkparam.typeParams.isEmpty) { // base-case: kind *
+ if (hkparam.typeParams.isEmpty && hkarg.typeParams.isEmpty) { // base-case: kind *
if (!variancesMatch(hkarg, hkparam))
varianceMismatch(hkarg, hkparam)
diff --git a/test/files/neg/t4044.check b/test/files/neg/t4044.check
new file mode 100644
index 0000000000..75dcf63bfe
--- /dev/null
+++ b/test/files/neg/t4044.check
@@ -0,0 +1,16 @@
+t4044.scala:9: error: AnyRef takes no type parameters, expected: one
+ M[AnyRef] // error, (AnyRef :: *) not kind-conformant to (N :: * -> * -> *)
+ ^
+t4044.scala:9: error: kinds of the type arguments (<error>) do not conform to the expected kinds of the type parameters (type N).
+<error>'s type parameters do not match type N's expected parameters: <none> has no type parameters, but type N has one
+ M[AnyRef] // error, (AnyRef :: *) not kind-conformant to (N :: * -> * -> *)
+ ^
+t4044.scala:11: error: kinds of the type arguments (Test.A) do not conform to the expected kinds of the type parameters (type N).
+Test.A's type parameters do not match type N's expected parameters: type _ has no type parameters, but type O has one
+ M[A] // error, (A :: (* -> *) not kind-conformant to (N :: * -> * -> *)
+ ^
+t4044.scala:15: error: kinds of the type arguments (Test.C) do not conform to the expected kinds of the type parameters (type N).
+Test.C's type parameters do not match type N's expected parameters: type _ has one type parameter, but type _ has none
+ M[C] // error, (C :: (* -> * -> * -> *) not kind-conformant to (N :: * -> * -> *)
+ ^
+four errors found
diff --git a/test/files/neg/t4044.scala b/test/files/neg/t4044.scala
new file mode 100644
index 0000000000..aedffbb96d
--- /dev/null
+++ b/test/files/neg/t4044.scala
@@ -0,0 +1,16 @@
+object Test {
+ def M[N[O[_]]] = ()
+ type A[_] = Any
+ type B[_[_]] = Any
+ type C[_[_[_]]] = Any
+
+ M[Any] // okay, Any is kind overloaded.
+
+ M[AnyRef] // error, (AnyRef :: *) not kind-conformant to (N :: * -> * -> *)
+
+ M[A] // error, (A :: (* -> *) not kind-conformant to (N :: * -> * -> *)
+
+ M[B] // okay, (B :: (* -> * -> *) is kind-conformant to (N :: * -> * -> *)
+
+ M[C] // error, (C :: (* -> * -> * -> *) not kind-conformant to (N :: * -> * -> *)
+} \ No newline at end of file