aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2017-04-18 17:28:40 +0200
committerGitHub <noreply@github.com>2017-04-18 17:28:40 +0200
commit6a0c581d24581cee19dd5448b1d6821f0538f0ca (patch)
treee476fc785d0df6d138e44a3e6c7dea411f649cd3
parentab124cb8cda3ab65b0195f1a7f74006c24ebe7ab (diff)
parent37120df19265da923703de00911e33937e5a66de (diff)
downloaddotty-6a0c581d24581cee19dd5448b1d6821f0538f0ca.zip
dotty-6a0c581d24581cee19dd5448b1d6821f0538f0ca.tar.gz
dotty-6a0c581d24581cee19dd5448b1d6821f0538f0ca.tar.bz2
Merge pull request #2236 from dotty-staging/fix-#2234
Fix #2234: Dealias before type erasing
-rw-r--r--compiler/src/dotty/tools/dotc/core/TypeErasure.scala4
-rw-r--r--tests/pos/i2234.scala13
2 files changed, 17 insertions, 0 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/TypeErasure.scala b/compiler/src/dotty/tools/dotc/core/TypeErasure.scala
index f357526..1eb90b8 100644
--- a/compiler/src/dotty/tools/dotc/core/TypeErasure.scala
+++ b/compiler/src/dotty/tools/dotc/core/TypeErasure.scala
@@ -377,6 +377,8 @@ class TypeErasure(isJava: Boolean, semiEraseVCs: Boolean, isConstructor: Boolean
defn.FunctionType(0)
case AndType(tp1, tp2) =>
erasedGlb(this(tp1), this(tp2), isJava)
+ case tp: HKApply =>
+ apply(tp.superType)
case OrType(tp1, tp2) =>
ctx.typeComparer.orType(this(tp1), this(tp2), erased = true)
case tp: MethodType =>
@@ -508,6 +510,8 @@ class TypeErasure(isJava: Boolean, semiEraseVCs: Boolean, isConstructor: Boolean
normalizeClass(sym.asClass).fullName.asTypeName
case defn.ArrayOf(elem) =>
sigName(this(tp))
+ case tp: HKApply =>
+ sigName(tp.superType)
case JavaArrayType(elem) =>
sigName(elem) ++ "[]"
case tp: TermRef =>
diff --git a/tests/pos/i2234.scala b/tests/pos/i2234.scala
new file mode 100644
index 0000000..8173c20
--- /dev/null
+++ b/tests/pos/i2234.scala
@@ -0,0 +1,13 @@
+object Test {
+ type Dummy[A] = A
+
+ def a(d: Dummy[String]) = ()
+ def a(d: Dummy[Int]) = ()
+
+ implicit def dummy[A]: Dummy[A] = null.asInstanceOf[A]
+ def m(x: List[String])(implicit d: Dummy[String]) = "string"
+ def m(x: List[Int])(implicit d: Dummy[Int]) = "int"
+
+ m(List(1, 2, 3))
+ m(List("a"))
+}