From e26f5c412a2498c23c8cc3e975208a71f8f7d558 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Fri, 24 May 2013 05:43:58 -0700 Subject: SI-7088 Array crasher in erasure. The usual business where half our pattern matches are missing half the necessary cases. --- src/reflect/scala/reflect/internal/transform/Erasure.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/reflect') diff --git a/src/reflect/scala/reflect/internal/transform/Erasure.scala b/src/reflect/scala/reflect/internal/transform/Erasure.scala index a9a1285de3..580ada8254 100644 --- a/src/reflect/scala/reflect/internal/transform/Erasure.scala +++ b/src/reflect/scala/reflect/internal/transform/Erasure.scala @@ -55,9 +55,13 @@ trait Erasure { } } + /** Arrays despite their finality may turn up as refined type parents, + * e.g. with "tagged types" like Array[Int] with T. + */ protected def unboundedGenericArrayLevel(tp: Type): Int = tp match { case GenericArray(level, core) if !(core <:< AnyRefTpe) => level - case _ => 0 + case RefinedType(ps, _) if ps.nonEmpty => logResult(s"Unbounded generic level for $tp is")(ps map unboundedGenericArrayLevel max) + case _ => 0 } // @M #2585 when generating a java generic signature that includes -- cgit v1.2.3