Skip to content

Commit 17b41ca

Browse files
nathanchancegregkh
authored andcommitted
compiler-clang.h: define __SANITIZE_*__ macros only when undefined
commit 3fac212 upstream. Clang 22 recently added support for defining __SANITIZE__ macros similar to GCC [1], which causes warnings (or errors with CONFIG_WERROR=y or W=e) with the existing defines that the kernel creates to emulate this behavior with existing clang versions. In file included from <built-in>:3: In file included from include/linux/compiler_types.h:171: include/linux/compiler-clang.h:37:9: error: '__SANITIZE_THREAD__' macro redefined [-Werror,-Wmacro-redefined] 37 | #define __SANITIZE_THREAD__ | ^ <built-in>:352:9: note: previous definition is here 352 | #define __SANITIZE_THREAD__ 1 | ^ Refactor compiler-clang.h to only define the sanitizer macros when they are undefined and adjust the rest of the code to use these macros for checking if the sanitizers are enabled, clearing up the warnings and allowing the kernel to easily drop these defines when the minimum supported version of LLVM for building the kernel becomes 22.0.0 or newer. Link: https://lkml.kernel.org/r/20250902-clang-update-sanitize-defines-v1-1-cf3702ca3d92@kernel.org Link: llvm/llvm-project@568c23b [1] Signed-off-by: Nathan Chancellor <nathan@kernel.org> Reviewed-by: Justin Stitt <justinstitt@google.com> Cc: Alexander Potapenko <glider@google.com> Cc: Andrey Konovalov <andreyknvl@gmail.com> Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com> Cc: Bill Wendling <morbo@google.com> Cc: Dmitriy Vyukov <dvyukov@google.com> Cc: Marco Elver <elver@google.com> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent f548932 commit 17b41ca

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

include/linux/compiler-clang.h

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,42 @@
2323
#define KASAN_ABI_VERSION 5
2424

2525
/*
26+
* Clang 22 added preprocessor macros to match GCC, in hopes of eventually
27+
* dropping __has_feature support for sanitizers:
28+
* https://github.com/llvm/llvm-project/commit/568c23bbd3303518c5056d7f03444dae4fdc8a9c
29+
* Create these macros for older versions of clang so that it is easy to clean
30+
* up once the minimum supported version of LLVM for building the kernel always
31+
* creates these macros.
32+
*
2633
* Note: Checking __has_feature(*_sanitizer) is only true if the feature is
2734
* enabled. Therefore it is not required to additionally check defined(CONFIG_*)
2835
* to avoid adding redundant attributes in other configurations.
2936
*/
37+
#if __has_feature(address_sanitizer) && !defined(__SANITIZE_ADDRESS__)
38+
#define __SANITIZE_ADDRESS__
39+
#endif
40+
#if __has_feature(hwaddress_sanitizer) && !defined(__SANITIZE_HWADDRESS__)
41+
#define __SANITIZE_HWADDRESS__
42+
#endif
43+
#if __has_feature(thread_sanitizer) && !defined(__SANITIZE_THREAD__)
44+
#define __SANITIZE_THREAD__
45+
#endif
3046

31-
#if __has_feature(address_sanitizer) || __has_feature(hwaddress_sanitizer)
32-
/* Emulate GCC's __SANITIZE_ADDRESS__ flag */
47+
/*
48+
* Treat __SANITIZE_HWADDRESS__ the same as __SANITIZE_ADDRESS__ in the kernel.
49+
*/
50+
#ifdef __SANITIZE_HWADDRESS__
3351
#define __SANITIZE_ADDRESS__
52+
#endif
53+
54+
#ifdef __SANITIZE_ADDRESS__
3455
#define __no_sanitize_address \
3556
__attribute__((no_sanitize("address", "hwaddress")))
3657
#else
3758
#define __no_sanitize_address
3859
#endif
3960

40-
#if __has_feature(thread_sanitizer)
41-
/* emulate gcc's __SANITIZE_THREAD__ flag */
42-
#define __SANITIZE_THREAD__
61+
#ifdef __SANITIZE_THREAD__
4362
#define __no_sanitize_thread \
4463
__attribute__((no_sanitize("thread")))
4564
#else

0 commit comments

Comments
 (0)