Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Makefile.extrawarn: re-enable -Wformat for clang; take 2

-Wformat was recently re-enabled for builds with clang, then quickly
re-disabled, due to concerns stemming from the frequency of default
argument promotion related warning instances.

commit 258fafcd0683 ("Makefile.extrawarn: re-enable -Wformat for clang")
commit 21f9c8a13bb2 ("Revert "Makefile.extrawarn: re-enable -Wformat for clang"")

ISO WG14 has ratified N2562 to address default argument promotion
explicitly for printf, as part of the upcoming ISO C2X standard.

The behavior of clang was changed in clang-16 to not warn for the cited
cases in all language modes.

Add a version check, so that users of clang-16 now get the full effect
of -Wformat. For older clang versions, re-enable flags under the
-Wformat group that way users still get some useful checks related to
format strings, without noisy default argument promotion warnings. I
intentionally omitted -Wformat-y2k and -Wformat-security from being
re-enabled, which are also part of -Wformat in clang-16.

Link: https://github.com/ClangBuiltLinux/linux/issues/378
Link: https://github.com/llvm/llvm-project/issues/57102
Link: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2562.pdf
Suggested-by: Justin Stitt <jstitt007@gmail.com>
Suggested-by: Nathan Chancellor <nathan@kernel.org>
Suggested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Nick Desaulniers and committed by
Linus Torvalds
b0839b28 7726d4c3

+12
+12
scripts/Makefile.extrawarn
··· 47 47 48 48 ifdef CONFIG_CC_IS_CLANG 49 49 KBUILD_CFLAGS += -Wno-initializer-overrides 50 + # Clang before clang-16 would warn on default argument promotions. 51 + ifeq ($(shell [ $(CONFIG_CLANG_VERSION) -lt 160000 ] && echo y),y) 52 + # Disable -Wformat 50 53 KBUILD_CFLAGS += -Wno-format 54 + # Then re-enable flags that were part of the -Wformat group that aren't 55 + # problematic. 56 + KBUILD_CFLAGS += -Wformat-extra-args -Wformat-invalid-specifier 57 + KBUILD_CFLAGS += -Wformat-zero-length -Wnonnull 58 + # Requires clang-12+. 59 + ifeq ($(shell [ $(CONFIG_CLANG_VERSION) -ge 120000 ] && echo y),y) 60 + KBUILD_CFLAGS += -Wformat-insufficient-args 61 + endif 62 + endif 51 63 KBUILD_CFLAGS += -Wno-sign-compare 52 64 KBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast) 53 65 KBUILD_CFLAGS += -Wno-tautological-constant-out-of-range-compare