diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-02-22 16:30:02 +0100 |
|---|---|---|
| committer | Christopher Li <sparse@chrisli.org> | 2017-03-04 00:45:38 +0800 |
| commit | ecb47e33d67a535716b4894c25cfe46c7abf1e3b (patch) | |
| tree | ecb45c2620f6118b6a368731e4295d97c3d9a1d2 | |
| parent | a9432b3336e8e584c85ed8a03535aa7564e93514 (diff) | |
| download | sparse-dev-ecb47e33d67a535716b4894c25cfe46c7abf1e3b.tar.gz | |
use option: '-Woverride-init'
Sparse warns unconditionally about overlapping initilalizers.
Introduces a warning flag to control this, use the same name
as GCC's and enabled it by default.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: Christopher Li <sparse@chrisli.org>
| -rw-r--r-- | expand.c | 3 | ||||
| -rw-r--r-- | lib.c | 2 | ||||
| -rw-r--r-- | lib.h | 1 | ||||
| -rw-r--r-- | validation/Woverride-init-def.c | 14 | ||||
| -rw-r--r-- | validation/Woverride-init-no.c | 12 | ||||
| -rw-r--r-- | validation/Woverride-init-yes.c | 14 |
6 files changed, 46 insertions, 0 deletions
@@ -916,6 +916,9 @@ static void verify_nonoverlapping(struct expression_list **list) struct expression *a = NULL; struct expression *b; + if (!Woverride_init) + return; + FOR_EACH_PTR(*list, b) { if (!b->ctype || !b->ctype->bit_size) continue; @@ -231,6 +231,7 @@ int Wsparse_error = 0; int Wnon_pointer_null = 1; int Wold_initializer = 1; int Wone_bit_signed_bitfield = 1; +int Woverride_init = 1; int Wparen_string = 0; int Wptr_subtraction_blows = 0; int Wreturn_void = 0; @@ -480,6 +481,7 @@ static const struct warning { { "non-pointer-null", &Wnon_pointer_null }, { "old-initializer", &Wold_initializer }, { "one-bit-signed-bitfield", &Wone_bit_signed_bitfield }, + { "override-init", &Woverride_init }, { "paren-string", &Wparen_string }, { "ptr-subtraction-blows", &Wptr_subtraction_blows }, { "return-void", &Wreturn_void }, @@ -117,6 +117,7 @@ extern int Winit_cstring; extern int Wnon_pointer_null; extern int Wold_initializer; extern int Wone_bit_signed_bitfield; +extern int Woverride_init; extern int Wparen_string; extern int Wptr_subtraction_blows; extern int Wreturn_void; diff --git a/validation/Woverride-init-def.c b/validation/Woverride-init-def.c new file mode 100644 index 00000000..95ecf33b --- /dev/null +++ b/validation/Woverride-init-def.c @@ -0,0 +1,14 @@ +static int array[] = { + [1] = 3, + [1] = 1, /* check-should-warn */ +}; + +/* + * check-name: Woverride-init-def + * check-command: sparse $file + * + * check-error-start +Woverride-init-def.c:2:10: warning: Initializer entry defined twice +Woverride-init-def.c:3:10: also defined here + * check-error-end + */ diff --git a/validation/Woverride-init-no.c b/validation/Woverride-init-no.c new file mode 100644 index 00000000..ba4d82b9 --- /dev/null +++ b/validation/Woverride-init-no.c @@ -0,0 +1,12 @@ +static int array[] = { + [1] = 3, + [1] = 1, /* check-should-warn */ +}; + +/* + * check-name: Woverride-init-no + * check-command: sparse -Wno-override-init $file + * + * check-error-start + * check-error-end + */ diff --git a/validation/Woverride-init-yes.c b/validation/Woverride-init-yes.c new file mode 100644 index 00000000..c04a836b --- /dev/null +++ b/validation/Woverride-init-yes.c @@ -0,0 +1,14 @@ +static int array[] = { + [1] = 3, + [1] = 1, /* check-should-warn */ +}; + +/* + * check-name: Woverride-init-yes + * check-command: sparse -Woverride-init $file + * + * check-error-start +Woverride-init-yes.c:2:10: warning: Initializer entry defined twice +Woverride-init-yes.c:3:10: also defined here + * check-error-end + */ |
