diff options
-rw-r--r-- | src/compiler/scala/reflect/internal/Types.scala | 4 | ||||
-rw-r--r-- | test/files/neg/bug3240.check | 7 | ||||
-rw-r--r-- | test/files/neg/bug3240.scala | 8 |
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 |