]> git.ipfire.org Git - thirdparty/git.git/commitdiff
oidtree: avoid nested struct oidtree_node
authorCarlo Marcelo Arenas Belón <carenas@gmail.com>
Mon, 9 Aug 2021 01:38:31 +0000 (18:38 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Aug 2021 16:01:30 +0000 (09:01 -0700)
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@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
oidtree.c

index 7eb0e9ba050115014d4b633fcd55dc8d5a90d7fc..580cab8ae27e08285d8a57cf55d95660072dcd53 100644 (file)
--- 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));
 }