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

Compiler Attributes: remove unneeded sparse (__CHECKER__) tests

Sparse knows about a few more attributes now, so we can remove
the __CHECKER__ conditions from them (which, in turn, allow us
to move some of them later on to compiler_attributes.h).

* assume_aligned: since sparse's commit ffc860b ("sparse:
ignore __assume_aligned__ attribute"), included in 0.5.1

* error: since sparse's commit 0a04210 ("sparse: Add 'error'
to ignored attributes"), included in 0.5.0

* hotpatch: since sparse's commit 6043210 ("sparse/parse.c:
ignore hotpatch attribute"), included in 0.5.1

* warning: since sparse's commit 977365d ("Avoid "attribute
'warning': unknown attribute" warning"), included in 0.4.2

On top of that, __must_be_array does not need it either because:

* Even ancient versions of sparse do not have a problem

* BUILD_BUG_ON_ZERO() is currently disabled for __CHECKER__

Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # on top of v4.19-rc5, clang 7
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>

+3 -9
+2 -4
include/linux/compiler-gcc.h
··· 76 76 77 77 #define __compiletime_object_size(obj) __builtin_object_size(obj, 0) 78 78 79 - #ifndef __CHECKER__ 80 79 #define __compiletime_warning(message) __attribute__((__warning__(message))) 81 80 #define __compiletime_error(message) __attribute__((__error__(message))) 82 81 83 - #ifdef LATENT_ENTROPY_PLUGIN 82 + #if defined(LATENT_ENTROPY_PLUGIN) && !defined(__CHECKER__) 84 83 #define __latent_entropy __attribute__((latent_entropy)) 85 84 #endif 86 - #endif /* __CHECKER__ */ 87 85 88 86 /* 89 87 * calling noreturn functions, __builtin_unreachable() and __builtin_trap() ··· 129 131 130 132 /* gcc version specific checks */ 131 133 132 - #if GCC_VERSION >= 40900 && !defined(__CHECKER__) 134 + #if GCC_VERSION >= 40900 133 135 /* 134 136 * __assume_aligned(n, k): Tell the optimizer that the returned 135 137 * pointer can be assumed to be k modulo n. The second argument is
-4
include/linux/compiler.h
··· 357 357 compiletime_assert(__native_word(t), \ 358 358 "Need native word sized stores/loads for atomicity.") 359 359 360 - #ifdef __CHECKER__ 361 - #define __must_be_array(a) 0 362 - #else 363 360 /* &a[0] degrades to a pointer: a different type from an array */ 364 361 #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) 365 - #endif 366 362 367 363 #endif /* __LINUX_COMPILER_H */
+1 -1
include/linux/compiler_types.h
··· 218 218 #define __must_check 219 219 #endif 220 220 221 - #if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__) 221 + #if defined(CC_USING_HOTPATCH) 222 222 #define notrace __attribute__((hotpatch(0, 0))) 223 223 #else 224 224 #define notrace __attribute__((__no_instrument_function__))