> --- array-released.diff 2019-11-14 21:29:11.020576916 +0100 > +++ array-reduced1.diff 2019-11-14 21:45:58.931956527 +0100 > @@ -6,24 +6,10 @@ > r->entry_count = t->entry_count; > r->delta_depth = t->delta_depth; > - memcpy(r->entries,t->entries,t->entry_count*sizeof(t->entries[0])); > -+ COPY_ARRAY(r->entries, t->entries, t->entry_count); > ++ memcpy(r->entries,t->entries,t->entry_count*sizeof(*(t->entries))); > release_tree_content(t); > return r; > } It took a while to become more aware of software development challenges for the safe data processing with the semantic patch language also at such a source code place. https://github.com/git/git/blob/3edfcc65fdfc708c1c8f1d314885eecf9beb9b67/fast-import.c#L640 I got the impression that the Coccinelle software is occasionally able to determine from the search specification “sizeof(T)” the corresponding data type for code like “*(t->entries)”. But it seems that there are circumstances to consider where the desired data type was not automatically determined. Thus the data processing can become safer by explicitly expressing the case distinction for the handling of expressions. Adjusted transformation rule: @@ type T; T* dst_ptr, src_ptr; T[] dst_arr, src_arr; expression n, x; @@ -memcpy +COPY_ARRAY ( ( dst_ptr | dst_arr ) , ( src_ptr | src_arr ) , - (n) * \( sizeof(T) \| sizeof(*(x)) \) + n ) Regards, Markus