summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2013-05-14 16:18:15 -0700
committerPaul Phillips <paulp@improving.org>2013-05-14 16:20:57 -0700
commitb4751a679a1e01d1d8826c4c2d68af269a1c0443 (patch)
tree87e63fcb70eb2b88e54166374c4280ba0ccb7354
parente28c3edda4dd405ed382227d2a688b799bf33c72 (diff)
downloadscala-b4751a679a1e01d1d8826c4c2d68af269a1c0443.tar.gz
scala-b4751a679a1e01d1d8826c4c2d68af269a1c0443.tar.bz2
scala-b4751a679a1e01d1d8826c4c2d68af269a1c0443.zip
No bounds-driven inference for the named.
This is a variation on the previous commit which excludes named type parameters, so this works def f(x: Class[_]) = x.foo.bar But this does not: def f[T](x: Class[T]) = x.foo.bar This seems undesirable to me, but I offer it in case it makes the patch more attractive to others.
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala1
-rw-r--r--test/files/neg/t5687.check7
-rw-r--r--test/files/pos/t1786.scala12
3 files changed, 12 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index b41df05c3d..491634cf3b 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -4914,6 +4914,7 @@ trait Typers extends Adaptations with Tags {
&& !tparam.isFBounded /* SI-2251 */
&& !tparam.isHigherOrderTypeParameter
&& !(abounds.hi <:< tbounds.hi)
+ && asym.isSynthetic /* this limits us to placeholder tparams, excluding named ones */
)
arg match {
case Bind(_, _) => enhanceBounds()
diff --git a/test/files/neg/t5687.check b/test/files/neg/t5687.check
index f8d02fdcc3..5096077ee5 100644
--- a/test/files/neg/t5687.check
+++ b/test/files/neg/t5687.check
@@ -1,5 +1,8 @@
-t5687.scala:20: error: overriding type Repr in class Template with bounds[T <: AnyRef] <: Template[T];
+t5687.scala:4: error: type arguments [T] do not conform to class Template's type parameter bounds [T <: AnyRef]
+ type Repr[T]<:Template[T]
+ ^
+t5687.scala:20: error: overriding type Repr in class Template with bounds[T] <: Template[T];
type Repr has incompatible type
type Repr = CurveTemplate[T]
^
-one error found
+two errors found
diff --git a/test/files/pos/t1786.scala b/test/files/pos/t1786.scala
index 22bd659609..32d6c06f6e 100644
--- a/test/files/pos/t1786.scala
+++ b/test/files/pos/t1786.scala
@@ -5,15 +5,15 @@ class Flooz[A >: Null <: SomeClass, T >: Null <: A](var value: T)
class A {
def f1(i:MyClass[_]) = i.myValue.intValue
def f2(i:MyClass[_ <: SomeClass]) = i.myValue.intValue
- def f3[T](i: MyClass[T]) = i.myValue.intValue
+ // def f3[T](i: MyClass[T]) = i.myValue.intValue
def f4[T <: SomeClass](i: MyClass[T]) = i.myValue.intValue
- def f5[T >: Null](i: MyClass[T]) = i.myValue.intValue
- def f6[T >: Null <: String](i: MyClass[T]) = i.myValue.intValue + i.myValue.charAt(0)
+ // def f5[T >: Null](i: MyClass[T]) = i.myValue.intValue
+ // def f6[T >: Null <: String](i: MyClass[T]) = i.myValue.intValue + i.myValue.charAt(0)
- def g1[A, T](x: Flooz[A, T]) = { x.value = null ; x.value.intValue }
+ // def g1[A, T](x: Flooz[A, T]) = { x.value = null ; x.value.intValue }
def g2(x: Flooz[_, _]) = { x.value = null ; x.value.intValue }
class MyClass2(x: MyClass[_]) { val p = x.myValue.intValue }
- class MyClass3[T <: String](x: MyClass[T]) { val p = x.myValue.intValue + x.myValue.length }
- class MyClass4[T >: Null](x: MyClass[T]) { val p = x.myValue.intValue }
+ // class MyClass3[T <: String](x: MyClass[T]) { val p = x.myValue.intValue + x.myValue.length }
+ // class MyClass4[T >: Null](x: MyClass[T]) { val p = x.myValue.intValue }
}