Re: [PATCH v2] kbuild: Move -Wenum-{compare-conditional,enum-conversion} into W=1

Masahiro Yamada
2024-03-10T12:54:32Z

On Wed, Mar 6, 2024 at 7:12 AM Nathan Chancellor <nathan@kernel.org> wrote:
>
> Clang enables -Wenum-enum-conversion and -Wenum-compare-conditional
> under -Wenum-conversion. A recent change in Clang strengthened these
> warnings and they appear frequently in common builds, primarily due to
> several instances in common headers but there are quite a few drivers
> that have individual instances as well.
>
> include/linux/vmstat.h:508:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
> 508 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
> | ~~~~~~~~~~~~~~~~~~~~~ ^
> 509 | item];
> | ~~~~
>
> drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c:955:24: warning: conditional expression between different enumeration types ('enum iwl_mac_beacon_flags' and 'enum iwl_mac_beacon_flags_v1') [-Wenum-compare-conditional]
> 955 | flags |= is_new_rate ? IWL_MAC_BEACON_CCK
> | ^ ~~~~~~~~~~~~~~~~~~
> 956 | : IWL_MAC_BEACON_CCK_V1;
> | ~~~~~~~~~~~~~~~~~~~~~
> drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c:1120:21: warning: conditional expression between different enumeration types ('enum iwl_mac_beacon_flags' and 'enum iwl_mac_beacon_flags_v1') [-Wenum-compare-conditional]
> 1120 | 0) > 10 ?
> | ^
> 1121 | IWL_MAC_BEACON_FILS :
> | ~~~~~~~~~~~~~~~~~~~
> 1122 | IWL_MAC_BEACON_FILS_V1;
> | ~~~~~~~~~~~~~~~~~~~~~~
>
> Doing arithmetic between or returning two different types of enums could
> be a bug, so each of the instance of the warning needs to be evaluated.
> Unfortunately, as mentioned above, there are many instances of this
> warning in many different configurations, which can break the build when
> CONFIG_WERROR is enabled.
>
> To avoid introducing new instances of the warnings while cleaning up the
> disruption for the majority of users, disable these warnings for the
> default build while leaving them on for W=1 builds.
>
> Cc: stable@vger.kernel.org
> Closes: https://github.com/ClangBuiltLinux/linux/issues/2002
> Link: https://github.com/llvm/llvm-project/commit/8c2ae42b3e1c6aa7c18f873edcebff7c0b45a37e
> Acked-by: Yonghong Song <yonghong.song@linux.dev>
> Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> ---
> Changes in v2:
> - Only disable the warning for the default build, leave it on for W=1 (Arnd)
> - Add Yonghong's ack, as the warning is still disabled for the default
> build.
> - Link to v1: https://lore.kernel.org/r/20240305-disable-extra-clang-enum-warnings-v1-1-6a93ef3d35ff@kernel.org

Applied to linux-kbuild.
Thanks.

--
Best Regards
Masahiro Yamada