@@ -101,6 +101,7 @@ int Wdo_while = 0;
int Wenum_mismatch = 1;
int Wexternal_function_has_definition = 1;
int Wflexible_array_array = 1;
+int Wflexible_array_nested = 0;
int Wflexible_array_sizeof = 0;
int Wimplicit_int = 1;
int Winit_cstring = 0;
@@ -843,6 +844,7 @@ static const struct flag warnings[] = {
{ "enum-mismatch", &Wenum_mismatch },
{ "external-function-has-definition", &Wexternal_function_has_definition },
{ "flexible-array-array", &Wflexible_array_array },
+ { "flexible-array-nested", &Wflexible_array_nested },
{ "flexible-array-sizeof", &Wflexible_array_sizeof },
{ "implicit-int", &Wimplicit_int },
{ "init-cstring", &Winit_cstring },
@@ -100,6 +100,7 @@ extern int Wdo_while;
extern int Wenum_mismatch;
extern int Wexternal_function_has_definition;
extern int Wflexible_array_array;
+extern int Wflexible_array_nested;
extern int Wflexible_array_sizeof;
extern int Wimplicit_int;
extern int Winit_cstring;
@@ -264,6 +264,13 @@ Sparse issues these warnings by default. To turn them off, use
\fB-Wno-flexible-array-array\fR.
.
.TP
+.B -Wflexible-array-nested
+Warn about structures containing a flexible array being contained into
+another structure, union or array.
+
+Sparse does not issue these warnings by default.
+.
+.TP
.B -Wflexible-array-sizeof
Warn about using the sizeof operator on a structure containing a flexible array,
possibly recursively.
@@ -197,6 +197,10 @@ static struct symbol * examine_struct_union_type(struct symbol *sym, int advance
info.max_align = member->ctype.alignment;
}
+ if (has_flexible_array(member))
+ info.has_flex_array = 1;
+ if (has_flexible_array(member) && Wflexible_array_nested)
+ warning(sym->pos, "nested flexible arrays");
fn(member, &info);
} END_FOR_EACH_PTR(member);
@@ -21,7 +21,6 @@ static int foo(struct s *s, union u *u)
/*
* check-name: flex-array-nested
* check-command: sparse -Wflexible-array-nested $file
- * check-known-to-fail
*
* check-error-start
flex-array-nested.c:6:8: warning: nested flexible arrays
A structure or a union containing another aggregate type containing, possibly recursively, a flexible array is quite error prone and make not much sense. So, add an option -Wflexible-array-nested to warn on such usage. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- options.c | 2 ++ options.h | 1 + sparse.1 | 7 +++++++ symbol.c | 4 ++++ validation/flex-array-nested.c | 1 - 5 files changed, 14 insertions(+), 1 deletion(-)