Re: [PATCH 3/5] reftable/stack: fix compiler warning due to missing braces
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Aug 12, 2025, 09:27 UTC
- Message-ID
- <aJsJE3UzKIVeg3di@pks.im>
- In-Reply-To
- <qruwf2zjl2uvf33mp4ajklvgx7wq7ctghu53rxzbgndfojudvh@ylr4otznu2og>
On Mon, Aug 11, 2025 at 09:18:09PM -0700, Carlo Arenas wrote:
Show 31 quoted lines
> On Tue, Aug 05, 2025 at 06:49:45AM -0800, Patrick Steinhardt wrote:
> > On Mon, Aug 04, 2025 at 12:14:22PM -0700, Junio C Hamano wrote:
> > > Patrick Steinhardt <ps@pks.im> writes:
> > >
> > > > Yeah, in general I'm also of the opinion that we shouldn't bother. But
> > > > in libgit2 we have pipelines that use such older compilers, and we don't
> > > > want to drop those for now. So I think we should treat the reftable
> > > > library specially, doubly so as this is the only instance that causes
> > > > problems.
> > >
> > > Hmph. Shouldn't there be some kind of "shim" layer where these
> > > things are defined per project convention and/or toolchain being
> > > used? So when building for git proper, you'd use {0} just as
> > > everybody else do, but for others your include file supplied by that
> > > project would use something else (like {{0}} in this case)? That
> > > kind of approach would be a better solution than open coding QSORT()
> > > in the longer term, for example.
> >
> > We do have a shim layer, but I don't think it makes sense to use it for
> > every small piece. The intent of that layer is to paper over platform
> > differences that we cannot easily hide away in a generic fashion. So
> > things like mmap, random numbers, handling includes or registering
> > lockfiles via atexit(3p).
> >
> > But I don't think it makes sense to use the shim layer for things like
> > `{0}` vs `{{0}}`
>
> I think the suggestion for using a shim layer solution is relevant, because
> additionally to the compatibility issues of the zero initializer, you also
> need to take into consideration that the proposed solution will still trigger
> warnings when compiled as C++ (where {0} should be instead {}).Do we even support compiling Git as C++?
> Why not do instead something like?
But this is fair indeed -- the definition is internal anyway and not exposed to outside callers, so we can just as well use `memset()`.
Patrick
Show 37 quoted lines
> diff --git a/reftable/stack.c b/reftable/stack.c
> index 4caf96aa1d..80ce8a7083 100644
> --- a/reftable/stack.c
> +++ b/reftable/stack.c
> @@ -704,8 +704,6 @@ struct reftable_addition {
> uint64_t next_update_index;
> };
>
> -#define REFTABLE_ADDITION_INIT {0}
> -
> static int reftable_stack_init_addition(struct reftable_addition *add,
> struct reftable_stack *st,
> unsigned int flags)
> @@ -859,7 +857,7 @@ int reftable_stack_new_addition(struct reftable_addition **dest,
> unsigned int flags)
> {
> int err = 0;
> - struct reftable_addition empty = REFTABLE_ADDITION_INIT;
> + static const struct reftable_addition empty;
>
> REFTABLE_CALLOC_ARRAY(*dest, 1);
> if (!*dest)
> @@ -879,8 +877,11 @@ static int stack_try_add(struct reftable_stack *st,
> void *arg),
> void *arg)
> {
> - struct reftable_addition add = REFTABLE_ADDITION_INIT;
> - int err = reftable_stack_init_addition(&add, st, 0);
> + struct reftable_addition add;
> + int err;
> +
> + memset(&add, 0, sizeof(add));
> + err = reftable_stack_init_addition(&add, st, 0);
> if (err < 0)
> goto done;
>
> Carlo