92d8ed8ac1 (oidtree: a crit-bit tree for odb_loose_cache, 2021-07-07) adds a struct oidtree_node that contains only an n field with a struct cb_node. unfortunately, while building in pedantic mode witch clang 12 (as well as a similar error from gcc 11) it will show: oidtree.c:11:17: error: 'n' may not be nested in a struct due to flexible array member [-Werror,-Wflexible-array-extensions] struct cb_node n; ^ because of a constrain coded in ISO C 11 6.7.2.1¶3 that forbids using structs that contain a flexible array as part of another struct. use a strict cb_node directly instead. Signed-off-by: Carlo Marcelo Arenas Belón <carenas@xxxxxxxxx> --- oidtree.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/oidtree.c b/oidtree.c index 7eb0e9ba05..580cab8ae2 100644 --- a/oidtree.c +++ b/oidtree.c @@ -6,11 +6,6 @@ #include "alloc.h" #include "hash.h" -struct oidtree_node { - /* n.k[] is used to store "struct object_id" */ - struct cb_node n; -}; - struct oidtree_iter_data { oidtree_iter fn; void *arg; @@ -35,13 +30,13 @@ void oidtree_clear(struct oidtree *ot) void oidtree_insert(struct oidtree *ot, const struct object_id *oid) { - struct oidtree_node *on; + struct cb_node *on; if (!oid->algo) BUG("oidtree_insert requires oid->algo"); on = mem_pool_alloc(&ot->mem_pool, sizeof(*on) + sizeof(*oid)); - oidcpy_with_padding((struct object_id *)on->n.k, oid); + oidcpy_with_padding((struct object_id *)on->k, oid); /* * n.b. Current callers won't get us duplicates, here. If a @@ -49,7 +44,7 @@ void oidtree_insert(struct oidtree *ot, const struct object_id *oid) * that won't be freed until oidtree_clear. Currently it's not * worth maintaining a free list */ - cb_insert(&ot->tree, &on->n, sizeof(*oid)); + cb_insert(&ot->tree, on, sizeof(*oid)); } -- 2.33.0.rc1.373.gc715f1a457