aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-09-24 23:59:40 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-10-01 00:44:53 +0200
commitb6d76fee64b9b2bf36760609d8f2030f71f759fe (patch)
treeaca76924d51fb541c150a7dd252024d0724decc1
parentd54f252497a0278ad709a97fb63bd745e132cc89 (diff)
downloadsparse-b6d76fee64b9b2bf36760609d8f2030f71f759fe.tar.gz
flex-array: warn on flexible arrays in unions
Flexible array members are not allowed in unions. So, warn if one is present. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--symbol.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/symbol.c b/symbol.c
index 6633e89d..e578b1a8 100644
--- a/symbol.c
+++ b/symbol.c
@@ -95,6 +95,9 @@ struct struct_union_info {
*/
static void lay_out_union(struct symbol *sym, struct struct_union_info *info)
{
+ if (sym->bit_size < 0 && is_array_type(sym))
+ sparse_error(sym->pos, "flexible array member '%s' in a union", show_ident(sym->ident));
+
if (sym->bit_size > info->bit_size)
info->bit_size = sym->bit_size;