summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala1
-rw-r--r--test/files/run/t4794.check1
-rw-r--r--test/files/run/t4794.scala12
3 files changed, 14 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
index 478e20dde8..825edbe517 100644
--- a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
+++ b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
@@ -346,6 +346,7 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
case ExistentialType(_, res) => specializedTypeVars(res)
case AnnotatedType(_, tp, _) => specializedTypeVars(tp)
case TypeBounds(lo, hi) => specializedTypeVars(List(lo, hi))
+ case RefinedType(parents, _) => parents flatMap specializedTypeVars toSet
case _ => Set()
}
diff --git a/test/files/run/t4794.check b/test/files/run/t4794.check
new file mode 100644
index 0000000000..f599e28b8a
--- /dev/null
+++ b/test/files/run/t4794.check
@@ -0,0 +1 @@
+10
diff --git a/test/files/run/t4794.scala b/test/files/run/t4794.scala
new file mode 100644
index 0000000000..afe89fa429
--- /dev/null
+++ b/test/files/run/t4794.scala
@@ -0,0 +1,12 @@
+trait Mutable[@specialized A] { def a: A; def a_=(a0: A): Unit }
+trait NotSpecialized { }
+class Arr[@specialized A](val arr: Array[A]) {
+ def bippy(m: Mutable[A]) { m.a = arr(0) }
+ def quux(m: Mutable[A] with NotSpecialized) { m.a = arr(0) }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ println(classOf[Arr[_]].getMethods filter (_.getName contains "quux") size) // expect 10, not 1
+ }
+}