Junio C Hamano <gitster@xxxxxxxxx> wrote: > Eric Wong <e@xxxxxxxxx> writes: > > > In the future, list iterator macros (e.g. list_for_each_entry) > > may also be implemented using OFFSETOF_VAR to save hackers the > > trouble of using container_of/list_entry macros and without > > relying on non-portable `__typeof__'. > > Can we add something like this as a preliminary preparation step > before the series? > > Subject: [PATCH] treewide: initialize pointers to hashmap entries > > There are not strictly necessary, but some compilers (e.g. clang > 6.0.1) apparently have trouble in construct we will use in the > OFFSETOF_VAR() macro, i.e. > > ((uintptr_t)&(ptr)->member - (uintptr_t)(ptr)) > > when the ptr is uninitialized. > > Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> > --- > attr.c | 2 +- > blame.c | 4 ++-- > builtin/describe.c | 2 +- > builtin/difftool.c | 2 +- > config.c | 2 +- > merge-recursive.c | 6 +++--- > revision.c | 4 ++-- > submodule-config.c | 2 +- > t/helper/test-hashmap.c | 2 +- > t/helper/test-lazy-init-name-hash.c | 4 ++-- > 10 files changed, 15 insertions(+), 15 deletions(-) That seems too tedious. I'm learning towards just initializing var = NULL in the start of the for-loop: @@ -449,7 +449,8 @@ static inline struct hashmap_entry *hashmap_iter_first(struct hashmap *map, * containing a @member which is a "struct hashmap_entry" */ #define hashmap_for_each_entry(map, iter, var, member) \ - for (var = hashmap_iter_first_entry_offset(map, iter, \ + for (var = NULL /* squelch uninitialized warnings for OFFSETOF_VAR */, \ + var = hashmap_iter_first_entry_offset(map, iter, \ OFFSETOF_VAR(var, member)); \ var; \ var = hashmap_iter_next_entry_offset(iter, \ (But I'm running on fumes all week, so not sure I trust it)