Changes since v1: - add macro BARF_UNLESS_COPYABLE - use __builtin_types_compatible_p if available factor out BARF_UNLESS_COPYABLE do full type check in BARF_UNLESS_COPYABLE add DUP_ARRAY use DUP_ARRAY attr.c | 3 +-- builtin/am.c | 3 +-- commit-graph.c | 3 +-- commit-reach.c | 3 +-- compat/mingw.c | 3 +-- contrib/coccinelle/array.cocci | 7 +++++++ git-compat-util.h | 15 +++++++++++++-- parse-options.c | 3 +-- pathspec.c | 6 ++---- 9 files changed, 28 insertions(+), 18 deletions(-) Range-Diff gegen v1: 1: 052b9c103d < -: ---------- do full type check in COPY_ARRAY and MOVE_ARRAY -: ---------- > 1: f50df9208f factor out BARF_UNLESS_COPYABLE -: ---------- > 2: 6a98a8f2a2 do full type check in BARF_UNLESS_COPYABLE 2: fb5544fc51 ! 3: 757baca245 add DUP_ARRAY @@ Commit message dst = ARRAY_DUP(src, n); That would be more versatile, as it could be used in declarations as - well. Making it type-safe would require the use of typeof from C23, - though. + well. Making it type-safe would require the use of typeof_unqual from + C23, though. So use the safe and compatible variant for now. 3: bfbf085ac3 = 4: 435fbd8e92 use DUP_ARRAY -- 2.39.0