git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] cocci: extend MEMZERO_ARRAY() rules

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 3, 2026, 19:16 UTC
Message-ID
<xmqqjywtskmr.fsf@gitster.g>
In-Reply-To
<20260203102908.749954-1-toon@iotcl.com>
Toon Claes <toon@iotcl.com> writes:
Show 37 quoted lines
> Recently the MEMZERO_ARRAY() macro was introduced. In that commit also
> coccinelle rules were added to capture cases that can be converted to
> use that macro.
>
> Later a few more cases were manually converted to use the macro, but
> coccinelle didn't capture those. Extend the rules to capture those as
> well.
>
> In various cases the code could be further beautified by removing
> parentheses which are no longer needed. Modify the coccinelle rules to
> optimize those as well and fix them.
>
> During conversion indentation also used spaces where tabs should be
> used, fix that in one go.
>
> Signed-off-by: Toon Claes <toon@iotcl.com>
> ---
>  contrib/coccinelle/array.cocci | 36 ++++++++++++++++++++++++++++------
>  diffcore-delta.c               |  2 +-
>  ewah/bitmap.c                  |  4 ++--
>  3 files changed, 33 insertions(+), 9 deletions(-)
>
> diff --git a/contrib/coccinelle/array.cocci b/contrib/coccinelle/array.cocci
> index d306f6a21e..e71baea00b 100644
> --- a/contrib/coccinelle/array.cocci
> +++ b/contrib/coccinelle/array.cocci
> @@ -107,9 +107,32 @@ type T;
>  T *ptr;
>  expression n;
>  @@
> -- memset(ptr, \( 0x0 \| 0 \), n * \( sizeof(T)
> --                                 \| sizeof(*ptr)
> --                                 \) )
> +- memset(ptr, \( 0 \| '\0' \), \( (n) \| n \) * \( sizeof(T)
> +-                                               \| sizeof(ptr[...])
> +-                                               \| sizeof(*ptr)
> +-                                               \) )

It is kind-a surprising that (n) with and without parentheses must be presented for the conversion to happen, while the tool clearly understands that 0 and 0x0 are equivalent ...

Show 11 quoted lines
> ++ MEMZERO_ARRAY(ptr, n)
> +
> +@@
> +type T;
> +T *ptr;
> +expression n;
> +@@
> +- memset(ptr, \( 0 \| '\0' \), \( sizeof(T)
> +-                              \| sizeof(ptr[...])
> +-                              \| sizeof(*ptr)
> +-                              \) * \( (n) \| n \) )

... and yet the tool does not understand the equivalence between '\0' and 0, nor (A * B) and (B * A). Puzzling, but OK.

And the pattern, with *ptr  substituted to ptr[], repeats.
Show 35 quoted lines
> diff --git a/diffcore-delta.c b/diffcore-delta.c
> index 2de9e9ccff..2b7db39983 100644
> --- a/diffcore-delta.c
> +++ b/diffcore-delta.c
> @@ -135,7 +135,7 @@ static struct spanhash_top *hash_chars(struct repository *r,
>  			      st_mult(sizeof(struct spanhash), (size_t)1 << i)));
>  	hash->alloc_log2 = i;
>  	hash->free = INITIAL_FREE(i);
> -	MEMZERO_ARRAY(hash->data, ((size_t)1 << i));
> +	MEMZERO_ARRAY(hash->data, (size_t)1 << i);
>
>  	n = 0;
>  	accum1 = accum2 = 0;
> diff --git a/ewah/bitmap.c b/ewah/bitmap.c
> index bf878bf876..c378e0ab78 100644
> --- a/ewah/bitmap.c
> +++ b/ewah/bitmap.c
> @@ -46,7 +46,7 @@ static void bitmap_grow(struct bitmap *self, size_t word_alloc)
>  {
>  	size_t old_size = self->word_alloc;
>  	ALLOC_GROW(self->words, word_alloc, self->word_alloc);
> -	MEMZERO_ARRAY(self->words + old_size, (self->word_alloc - old_size));
> +	MEMZERO_ARRAY(self->words + old_size, self->word_alloc - old_size);
>  }
>
>  void bitmap_set(struct bitmap *self, size_t pos)
> @@ -192,7 +192,7 @@ void bitmap_or_ewah(struct bitmap *self, struct ewah_bitmap *other)
>  		self->word_alloc = other_final;
>  		REALLOC_ARRAY(self->words, self->word_alloc);
>  		MEMZERO_ARRAY(self->words + original_size,
> -		              (self->word_alloc - original_size));
> +			      self->word_alloc - original_size);
>  	}
>
>  	ewah_iterator_init(&it, other);
OK.  These do look easier to follow without extra parentheses.
Will queue.  Thanks.
Previous: Toon Claes
Message 2 of 2 in “cocci: extend MEMZERO_ARRAY() rules”
  1. cocci: extend MEMZERO_ARRAY() rulesToon Claes, Feb 3, 2026
  2. Junio C HamanoFeb 3, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.