I had seen an interesting compilation breakage today. A topic adds many more uses of argv-array API so I resolved semantic conflict patch until "make builtins/submodule-helper.o" passed. I failed to spot one remaining breakage until I saw https://travis-ci.org/github/git/git/jobs/715668996 The problematic line was precompose_argv(diff_args.argc, diff_args.argv); where diff_args used to be an argv_array and is now a strvec. Why didn't I catch this in my local test? $ git grep -n -e precompose_argv -- \*.h compat/precompose_utf8.h:31:void precompose_argv(int argc, const char **argv); git-compat-util.h:256:#define precompose_argv(c,v) The problematic part is this one used on all platforms other than macOS: /* used on Mac OS X */ #ifdef PRECOMPOSE_UNICODE #include "compat/precompose_utf8.h" #else #define precompose_str(in,i_nfd2nfc) #define precompose_argv(c,v) #define probe_utf8_pathname_composition() #endif I am wondering if it is a good idea to use something like static inline void precompose_argv(int argc, const char **argv) { ; /* nothing */ } instead. As long as the compiler is reasonable enough, this should not result in any code change in the result, except that it would still catch wrong arguments, even if these two parameters are unused and optimized out.