Skip to content

Commit 1482594

Browse files
carenasgitster
authored andcommitted
oidtree: avoid nested struct oidtree_node
92d8ed8 (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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 92d8ed8 commit 1482594

File tree

1 file changed

+3
-8
lines changed

1 file changed

+3
-8
lines changed

oidtree.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@
66
#include "alloc.h"
77
#include "hash.h"
88

9-
struct oidtree_node {
10-
/* n.k[] is used to store "struct object_id" */
11-
struct cb_node n;
12-
};
13-
149
struct oidtree_iter_data {
1510
oidtree_iter fn;
1611
void *arg;
@@ -35,21 +30,21 @@ void oidtree_clear(struct oidtree *ot)
3530

3631
void oidtree_insert(struct oidtree *ot, const struct object_id *oid)
3732
{
38-
struct oidtree_node *on;
33+
struct cb_node *on;
3934

4035
if (!oid->algo)
4136
BUG("oidtree_insert requires oid->algo");
4237

4338
on = mem_pool_alloc(&ot->mem_pool, sizeof(*on) + sizeof(*oid));
44-
oidcpy_with_padding((struct object_id *)on->n.k, oid);
39+
oidcpy_with_padding((struct object_id *)on->k, oid);
4540

4641
/*
4742
* n.b. Current callers won't get us duplicates, here. If a
4843
* future caller causes duplicates, there'll be a a small leak
4944
* that won't be freed until oidtree_clear. Currently it's not
5045
* worth maintaining a free list
5146
*/
52-
cb_insert(&ot->tree, &on->n, sizeof(*oid));
47+
cb_insert(&ot->tree, on, sizeof(*oid));
5348
}
5449

5550

0 commit comments

Comments
 (0)