summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/reflect/scala/reflect/internal/Types.scala4
-rw-r--r--test/files/pos/t8301.scala19
2 files changed, 21 insertions, 2 deletions
diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala
index d60ea73814..ac6c6f67c0 100644
--- a/src/reflect/scala/reflect/internal/Types.scala
+++ b/src/reflect/scala/reflect/internal/Types.scala
@@ -4133,8 +4133,8 @@ trait Types
if (symHi.isTerm)
(isSubType(tpLo, tpHi, depth) &&
- (!symHi.isStable || symLo.isStable) && // sub-member must remain stable
- (!symLo.hasVolatileType || symHi.hasVolatileType)) // sub-member must not introduce volatility
+ (!symHi.isStable || symLo.isStable) && // sub-member must remain stable
+ (!symLo.hasVolatileType || symHi.hasVolatileType || tpHi.isWildcard)) // sub-member must not introduce volatility
else if (symHi.isAbstractType)
((tpHi.bounds containsType tpLo) &&
kindsConform(symHi :: Nil, tpLo :: Nil, preLo, symLo.owner))
diff --git a/test/files/pos/t8301.scala b/test/files/pos/t8301.scala
new file mode 100644
index 0000000000..2d10864c57
--- /dev/null
+++ b/test/files/pos/t8301.scala
@@ -0,0 +1,19 @@
+trait Universe {
+ type Symbol >: Null <: AnyRef with SymbolApi
+ trait SymbolApi
+
+ type TypeSymbol >: Null <: TypeSymbolApi with Symbol
+ trait TypeSymbolApi
+
+ implicit class CompatibleSymbol(sym: Symbol) {
+ def asFreeType: TypeSymbol = ???
+ }
+}
+
+object Test extends App {
+ val u: Universe = ???
+ import u._
+
+ val sym: Symbol = ???
+ sym.asFreeType
+}