Skip to content

Commit 047d302

Browse files
committed
Dealias for unused param check
1 parent 4dc7db7 commit 047d302

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

compiler/src/dotty/tools/dotc/core/SymDenotations.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ object SymDenotations {
685685
isAbstractOrAliasType && !isAbstractOrParamType
686686

687687
/** Is this symbol an abstract or alias type? */
688-
final def isAbstractOrAliasType: Boolean = isType & !isClass
688+
final def isAbstractOrAliasType: Boolean = isType && !isClass
689689

690690
/** Is this symbol an abstract type or type parameter? */
691691
final def isAbstractOrParamType(using Context): Boolean = this.isOneOf(DeferredOrTypeParam)

compiler/src/dotty/tools/dotc/transform/CheckUnused.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,14 +575,14 @@ object CheckUnused:
575575
|| m.hasAnnotation(dd.UnusedAnnot) // param of unused method
576576
|| sym.name.is(ContextFunctionParamName) // a ubiquitous parameter
577577
|| sym.isCanEqual
578-
|| sym.info.typeSymbol.match // more ubiquity
578+
|| sym.info.dealias.typeSymbol.match // more ubiquity
579579
case dd.DummyImplicitClass | dd.SubTypeClass | dd.SameTypeClass => true
580580
case tps =>
581581
tps.isMarkerTrait // no members to use; was only if sym.name.is(ContextBoundParamName)
582582
|| // but consider NotGiven
583583
tps.hasAnnotation(dd.LanguageFeatureMetaAnnot)
584584
|| sym.info.isSingleton // DSL friendly
585-
|| sym.info.isInstanceOf[RefinedType] // can't be expressed as a context bound
585+
|| sym.info.dealias.isInstanceOf[RefinedType] // can't be expressed as a context bound
586586
if ctx.settings.WunusedHas.implicits
587587
&& !infos.skip(m)
588588
&& !m.isEffectivelyOverride

tests/warn/i23250.scala

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//> using options -Wunused:all -Werror
2+
3+
trait MonadError[F[_], E]
4+
type MonadThrow[F[_]] = MonadError[F, Throwable]
5+
6+
trait MetaStreams[F[_]]:
7+
def use[A]: F[A] = ???
8+
trait WriteResult
9+
10+
trait MetaStreamsSyntax:
11+
extension [F[_]](ms: MetaStreams[F])(using MonadThrow[F])
12+
def setMaxAge(): F[WriteResult] =
13+
summon[MonadThrow[F]]
14+
ms.use[WriteResult]
15+
16+
def setTruncateBefore(): F[WriteResult] =
17+
ms.use[WriteResult]

0 commit comments

Comments
 (0)