summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/reflect/internal/Types.scala4
-rw-r--r--test/files/neg/bug3240.check7
-rw-r--r--test/files/neg/bug3240.scala8
3 files changed, 17 insertions, 2 deletions
diff --git a/src/compiler/scala/reflect/internal/Types.scala b/src/compiler/scala/reflect/internal/Types.scala
index aa12414608..bb5608917b 100644
--- a/src/compiler/scala/reflect/internal/Types.scala
+++ b/src/compiler/scala/reflect/internal/Types.scala
@@ -1790,8 +1790,8 @@ trait Types extends api.Types { self: SymbolTable =>
relativeInfoCache
}
- override def typeSymbol = if (sym.isAliasType) normalize.typeSymbol else sym
- override def termSymbol = if (sym.isAliasType) normalize.termSymbol else super.termSymbol
+ override def typeSymbol = if (sym.isAliasType && (this ne normalize)) normalize.typeSymbol else sym
+ override def termSymbol = if (sym.isAliasType && (this ne normalize)) normalize.termSymbol else super.termSymbol
override def typeSymbolDirect = sym
override def termSymbolDirect = super.termSymbol
diff --git a/test/files/neg/bug3240.check b/test/files/neg/bug3240.check
new file mode 100644
index 0000000000..4f751d6f00
--- /dev/null
+++ b/test/files/neg/bug3240.check
@@ -0,0 +1,7 @@
+bug3240.scala:3: error: only classes can have declared but undefined members
+ type t
+ ^
+bug3240.scala:5: error: type arguments [this.t] do not conform to method asInstanceOf's type parameter bounds [T0]
+ a.getOrElse(defVal).asInstanceOf[t]
+ ^
+two errors found
diff --git a/test/files/neg/bug3240.scala b/test/files/neg/bug3240.scala
new file mode 100644
index 0000000000..cf197a406d
--- /dev/null
+++ b/test/files/neg/bug3240.scala
@@ -0,0 +1,8 @@
+class A {
+ val foo = new {
+ type t
+ def apply(a: Option[t], defVal: Any) = {
+ a.getOrElse(defVal).asInstanceOf[t]
+ }
+ }
+} \ No newline at end of file