diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-09-15 18:11:35 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-09-17 12:41:15 +0200 |
commit | 4966589b7d09f1650bf2df461ba3c6461552a0e3 (patch) | |
tree | c2defaa973db7f4e4538f763cfa0faa5fb80dd99 | |
parent | 50e3a7d92f4b7cc4cd922eb92c7ed8bf793b159c (diff) | |
download | dotty-4966589b7d09f1650bf2df461ba3c6461552a0e3.tar.gz dotty-4966589b7d09f1650bf2df461ba3c6461552a0e3.tar.bz2 dotty-4966589b7d09f1650bf2df461ba3c6461552a0e3.zip |
Fix #791 erasedLub of two AnyVals is Object.
-rw-r--r-- | src/dotty/tools/dotc/core/TypeErasure.scala | 6 | ||||
-rw-r--r-- | tests/run/OrType.scala | 11 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/TypeErasure.scala b/src/dotty/tools/dotc/core/TypeErasure.scala index 0ef31015c..f27b2fd1e 100644 --- a/src/dotty/tools/dotc/core/TypeErasure.scala +++ b/src/dotty/tools/dotc/core/TypeErasure.scala @@ -234,7 +234,11 @@ object TypeErasure { case nil => bestSoFar } - loop(tp1.baseClasses, defn.ObjectClass).typeRef + val t = loop(tp1.baseClasses, defn.ObjectClass) + if (t eq defn.AnyValClass) + // while AnyVal is a valid common super class for primitives it does not exist after erasure + defn.ObjectType + else t.typeRef } } diff --git a/tests/run/OrType.scala b/tests/run/OrType.scala new file mode 100644 index 000000000..9ab805def --- /dev/null +++ b/tests/run/OrType.scala @@ -0,0 +1,11 @@ +class B(val x: Int) +class C(val x: Double) + +object Test{ + def bar(x: B | C): Int | Double = x.x + def main(args: Array[String]): Unit = { + val b = new B(1) + val c = new C(1) + bar(if (b.hashCode > c.hashCode) b else c) + } +} |