From: Junio C Hamano Date: Sat, 13 Dec 2025 01:22:52 GMT Subject: Re: [PATCH 2/2] contrib/coccinelle: pass include paths to spatch(1) Message-ID: In-Reply-To: <20251210-toon-cocci-memzero-v1-2-ae916a79065b@iotcl.com> Toon Claes writes: > In the previous commit a new coccinelle rule is added. But neiter > `make coccicheck` nor `meson compile coccicheck` did detect a case in > builtin/last-modified.c. I can reproduce this. I started with only git-compat-util.h and contrib/coccinelle/array.cocci from your [1/2] and without [2/2], and "make coccicheck" produced all other changes contained in [1/2] and the leftover changes to diffcore-delta.c, linear-assignment.c and shallow.c I reported earlier in a separate message, but the one in last-modified.c is left intact. There are successful rewrites that involve eword_t in other files, so I am not sure what the problem is. I used the following instead of your [1/2], as suggested by René in an earlier exchange. I did not see any changes but I did not expect to, either. contrib/coccinelle/array.cocci | 22 ++++++++++++++++++++++ git-compat-util.h | 1 + 2 files changed, 23 insertions(+) diff --git a/contrib/coccinelle/array.cocci b/contrib/coccinelle/array.cocci index 27a3b479c9..ae23114b68 100644 --- a/contrib/coccinelle/array.cocci +++ b/contrib/coccinelle/array.cocci @@ -101,3 +101,25 @@ expression dst, src, n; -ALLOC_ARRAY(dst, n); -COPY_ARRAY(dst, src, n); +DUP_ARRAY(dst, src, n); + +@@ +type T; +T *ptr; +expression n; +@@ +- memset(ptr, \( '\0' \| 0 \), n * \( sizeof(T) +- \| sizeof(*ptr) +- \| sizeof(ptr[0]) +- \) ) ++ MEMZERO_ARRAY(ptr, n) + +@@ +type T; +T[] ptr; +expression n; +@@ +- memset(ptr, \( '\0' \| 0 \), n * \( sizeof(T) +- \| sizeof(*ptr) +- \| sizeof(ptr[0]) +- \) ) ++ MEMZERO_ARRAY(ptr, n) diff --git a/git-compat-util.h b/git-compat-util.h index 398e0fac4f..2b8192fd2e 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -726,6 +726,7 @@ static inline uint64_t u64_add(uint64_t a, uint64_t b) #define ALLOC_ARRAY(x, alloc) (x) = xmalloc(st_mult(sizeof(*(x)), (alloc))) #define CALLOC_ARRAY(x, alloc) (x) = xcalloc((alloc), sizeof(*(x))) #define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), st_mult(sizeof(*(x)), (alloc))) +#define MEMZERO_ARRAY(x, alloc) memset((x), 0x0, st_mult(sizeof(*(x)), (alloc))) #define COPY_ARRAY(dst, src, n) copy_array((dst), (src), (n), sizeof(*(dst)) + \ BARF_UNLESS_COPYABLE((dst), (src)))