diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2018-11-30 22:51:24 +0100 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2018-12-01 02:14:10 +0100 |
commit | eb35b2e8aa79552fe0ccd7a4e7a7753b230cbdd4 (patch) | |
tree | e8377e3916984fc17e9452dfab6c9537c03e603d | |
parent | 6f7aa5e84dacec8e27a8d70090bba26a1a1276de (diff) | |
download | sparse-eb35b2e8aa79552fe0ccd7a4e7a7753b230cbdd4.tar.gz |
Use -Wimplicit-int when warning about missing K&R argument types
In legacy environment, a lot of warnings can be issued about
arguments without an explicit type.
Fix this by contitionalizing such warnings with the flag
-Wimplicit-int, reducing the level of noise in such environment.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r-- | lib.c | 2 | ||||
-rw-r--r-- | lib.h | 1 | ||||
-rw-r--r-- | parse.c | 5 | ||||
-rw-r--r-- | validation/implicit-KR-arg-type0.c | 15 |
4 files changed, 22 insertions, 1 deletions
@@ -262,6 +262,7 @@ int Wdeclarationafterstatement = -1; int Wdefault_bitfield_sign = 0; int Wdesignated_init = 1; int Wdo_while = 0; +int Wimplicit_int = 1; int Winit_cstring = 0; int Wint_to_pointer_cast = 1; int Wenum_mismatch = 1; @@ -700,6 +701,7 @@ static const struct flag warnings[] = { { "designated-init", &Wdesignated_init }, { "do-while", &Wdo_while }, { "enum-mismatch", &Wenum_mismatch }, + { "implicit-int", &Wimplicit_int }, { "init-cstring", &Winit_cstring }, { "int-to-pointer-cast", &Wint_to_pointer_cast }, { "memcpy-max-count", &Wmemcpy_max_count }, @@ -152,6 +152,7 @@ extern int Wdesignated_init; extern int Wdo_while; extern int Wenum_mismatch; extern int Wsparse_error; +extern int Wimplicit_int; extern int Winit_cstring; extern int Wint_to_pointer_cast; extern int Wmemcpy_max_count; @@ -2770,7 +2770,10 @@ static void apply_k_r_types(struct symbol_list *argtypes, struct symbol *fn) if (type->ident == arg->ident) goto match; } END_FOR_EACH_PTR(type); - sparse_error(arg->pos, "missing type declaration for parameter '%s'", show_ident(arg->ident)); + if (Wimplicit_int) { + sparse_error(arg->pos, "missing type declaration for parameter '%s'", + show_ident(arg->ident)); + } type = alloc_symbol(arg->pos, SYM_NODE); type->ident = arg->ident; type->ctype.base_type = &int_ctype; diff --git a/validation/implicit-KR-arg-type0.c b/validation/implicit-KR-arg-type0.c new file mode 100644 index 00000000..f73d36ff --- /dev/null +++ b/validation/implicit-KR-arg-type0.c @@ -0,0 +1,15 @@ +int foo(a, b) + int a; +{ + if (b) + return a; +} + +/* + * check-name: implicit-KR-arg-type + * check-command: sparse -Wno-decl -Wold-style-definition -Wno-implicit-int $file + * + * check-error-start +implicit-KR-arg-type0.c:2:9: warning: non-ANSI definition of function 'foo' + * check-error-end + */ |