diff --git a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala index 2a5db6eebf9a..3ab66083a423 100644 --- a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala +++ b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala @@ -290,12 +290,16 @@ private sealed trait WarningSettings: ) object WshadowHas: - def allOr(s: String)(using Context) = - Wshadow.value.pipe(us => us.contains("all") || us.contains(s)) + // Is any choice set for -Wshadow? + def any(using Context): Boolean = Wall.value || Wshadow.value.nonEmpty + + def allOr(s: String)(using Context): Boolean = + Wall.value || Wshadow.value.pipe(us => us.contains("all") || us.contains(s)) def privateShadow(using Context) = allOr("private-shadow") def typeParameterShadow(using Context) = allOr("type-parameter-shadow") + end WshadowHas val WsafeInit: Setting[Boolean] = BooleanSetting(WarningSetting, "Wsafe-init", "Ensure safe initialization of objects.") diff --git a/compiler/src/dotty/tools/dotc/transform/CheckShadowing.scala b/compiler/src/dotty/tools/dotc/transform/CheckShadowing.scala index e6fe64fe7b62..fe7ed64e3c82 100644 --- a/compiler/src/dotty/tools/dotc/transform/CheckShadowing.scala +++ b/compiler/src/dotty/tools/dotc/transform/CheckShadowing.scala @@ -48,10 +48,10 @@ class CheckShadowing extends MiniPhase: override def description: String = CheckShadowing.description - override def isEnabled(using Context): Boolean = ctx.settings.Wshadow.value.nonEmpty + override def isEnabled(using Context): Boolean = ctx.settings.WshadowHas.any override def isRunnable(using Context): Boolean = - super.isRunnable && ctx.settings.Wshadow.value.nonEmpty && !ctx.isJava + super.isRunnable && ctx.settings.WshadowHas.any && !ctx.isJava override def prepareForUnit(tree: tpd.Tree)(using Context): Context = val data = ShadowingData() diff --git a/tests/warn/i24466.scala b/tests/warn/i24466.scala new file mode 100644 index 000000000000..a0dee9500586 --- /dev/null +++ b/tests/warn/i24466.scala @@ -0,0 +1,7 @@ +//> using options -Wall + +class A: + protected val x: String = "" + +class B extends A: + private val x: Int = 0 // warn // warn unused and shadowing