aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/evaluate.c
diff options
authorJoey Pabalinas <joeypabalinas@gmail.com>2018-04-10 12:46:24 -1000
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-04-11 20:43:37 +0200
commit551b85c8a241bd45b267db152eca4cb01eddce39 (patch)
treef317dfe5e9da6ec56e2d4db4b3a2a9eeceb4c026 /evaluate.c
parent8d1fb16c9e5f1fd1b3e3b5b39daad85b28b875f7 (diff)
downloadsparse-dev-551b85c8a241bd45b267db152eca4cb01eddce39.tar.gz
sparse: add -Wpointer-arith flag to toggle sizeof(void) warnings
Recent changes to the min()/max() macros in include/linux/kernel.h have added a lot of noise when compiling the kernel with Sparse checking enabled. This mostly is due to the *huge* increase in the number of sizeof(void) warnings, a larger number of which can safely be ignored. Add the -Wpointer-arith flag to enable/disable these warnings (along with the warning when applying sizeof to function types as well as warning about pointer arithmetic on these types exactly like the GCC -Wpointer-arith flag) on demand; the warning itself has been disabled by default to reduce the large influx of noise which was inadvertently added by commit 3c8ba0d61d04ced9f8 (kernel.h: Retain constant expression output for max()/min()). Update the manpage to document the new flag and add a validation case for sizeof(void). CC: Kees Cook <keescook@chromium.org> CC: Linus Torvalds <torvalds@linux-foundation.org> CC: Martin Uecker <Martin.Uecker@med.uni-goettingen.de> CC: Al Viro <viro@ZenIV.linux.org.uk> CC: Christopher Li <sparse@chrisli.org> CC: Joey Pabalinas <joeypabalinas@gmail.com> CC: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> Signed-off-by: Joey Pabalinas <joeypabalinas@gmail.com> Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'evaluate.c')
-rw-r--r--evaluate.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/evaluate.c b/evaluate.c
index 9ee47c61..0d50220a 100644
--- a/evaluate.c
+++ b/evaluate.c
@@ -2193,7 +2193,8 @@ static struct symbol *evaluate_sizeof(struct expression *expr)
size = type->bit_size;
if (size < 0 && is_void_type(type)) {
- warning(expr->pos, "expression using sizeof(void)");
+ if (Wpointer_arith)
+ warning(expr->pos, "expression using sizeof(void)");
size = bits_in_char;
}
@@ -2204,7 +2205,8 @@ static struct symbol *evaluate_sizeof(struct expression *expr)
}
if (is_function(type->ctype.base_type)) {
- warning(expr->pos, "expression using sizeof on a function");
+ if (Wpointer_arith)
+ warning(expr->pos, "expression using sizeof on a function");
size = bits_in_char;
}