On Wed, Oct 16, 2024, at 18:01, Nathan Chancellor wrote:
-Wenum-enum-conversion and -Wenum-compare-conditional were strengthened in clang-19 to warn in C mode, which caused the kernel to move them to W=1 in commit 75b5ab134bb5 ("kbuild: Move -Wenum-{compare-conditional,enum-conversion} into W=1") because there were numerous instances of each that would break builds with -Werror. Unfortunately, this is not a full solution, as more and more developers, subsystems, and distributors are building with W=1 as well, so they continue to see the numerous instances of these warnings.
Since the move to W=1, there have not been many new instances that have appeared through various build reports and the ones that have appeared seem to be following similar existing patterns, suggesting that most instances of these warnings will not be real issues. The only alternatives for silencing these warnings are adding casts (which is generally seen as an ugly practice) or refactoring the enums to macro defines or a unified enum (which may be undesirable because of type safety in other parts of the code).
Disable the warnings altogether so that W=1 users do not see them.
I don't think we have to go all the way of completely disabling the warnings here, they are still potentially useful. I can see three ways of being less aggressive with them:
- keep -Wno-enum-compare-conditional in W=1 and fix up the remaining warnings for that, iirc the Wno-enum-enum-conversion is the one that causes the problems.
- Move them to W=2 instead of always disabled
- Leave the warnings enabled for clang-18 and older.
Arnd