diff --git a/compiler/src/dotty/tools/dotc/transform/CheckUnused.scala b/compiler/src/dotty/tools/dotc/transform/CheckUnused.scala index 745c94d0e904..1e0a716c7d04 100644 --- a/compiler/src/dotty/tools/dotc/transform/CheckUnused.scala +++ b/compiler/src/dotty/tools/dotc/transform/CheckUnused.scala @@ -189,7 +189,7 @@ class CheckUnused private (phaseMode: PhaseMode, suffix: String) extends MiniPha if !tree.symbol.is(Deferred) && tree.rhs.symbol != defn.Predef_undefined then register(tree) relax(tree.rhs, tree.tpt.tpe) - ctx + if tree.symbol.isAllOf(EnumCase) then ctx.outer else ctx override def transformValDef(tree: ValDef)(using Context): tree.type = traverseAnnotations(tree.symbol) if tree.name.startsWith("derived$") && tree.hasType then @@ -222,6 +222,8 @@ class CheckUnused private (phaseMode: PhaseMode, suffix: String) extends MiniPha resolveUsage(defn.Compiletime_deferred, nme.NO_NAME, NoPrefix) tree + override def prepareForTypeDef(tree: TypeDef)(using Context): Context = + if tree.symbol.isAllOf(EnumCase) then ctx.outer else ctx override def transformTypeDef(tree: TypeDef)(using Context): tree.type = traverseAnnotations(tree.symbol) if !tree.symbol.is(Param) then // type parameter to do? diff --git a/tests/warn/i24646.scala b/tests/warn/i24646.scala new file mode 100644 index 000000000000..5bcfd5ffa7fc --- /dev/null +++ b/tests/warn/i24646.scala @@ -0,0 +1,13 @@ +//> using options -Wunused:all + +import Test.OnlyFirst +import Test.OnlyThird + +enum Test: + case First extends Test with OnlyFirst + case Second extends Test + case Third(s: String) extends Test with OnlyThird + +object Test: + sealed trait OnlyFirst + sealed trait OnlyThird