"Jeff Hostetler via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > This patch series fixes three syntax errors that caused compiler errors with > clang 11.0.0 on MacOS. I've included the error/warning messages in the > commit messages. The offending statements did compile successfully under > clang 14.0.0 on MacOS, so I have to assume that this usage is newer than > what clang 11 supports. Ah, this looked familiar, and the last time we saw the one in builtin/unpack-objects.c https://lore.kernel.org/git/20220710081135.74964-1-sunshine@xxxxxxxxxxxxxx/ It seems that merge-file.c was OK back then but soon after we "broke" it with 480a0e30 (merge-file: refactor for subsequent memory leak fix, 2022-07-01). $ git grep -n -e '{ *{ *0 *} *}' builtin/merge-index.c:15: char oids[3][GIT_MAX_HEXSZ + 1] = {{0}}; builtin/merge-index.c:16: char modes[3][10] = {{0}}; builtin/worktree.c:321: struct config_set cs = { { 0 } }; merge-strategies.c:93: xmparam_t xmp = {{0}}; oidset.h:25:#define OIDSET_INIT { { 0 } } worktree.c:795: struct config_set cs = { { 0 } }; I wonder if we want to introduce some named _INIT for these specific types? Perhaps with something like /* for config_set */ #define CONFIG_SET_INIT {{0}} /* for xmparam_t */ #define XMPARAM_INIT {{0}} /* for mmfile_t */ #define MMFILE_INIT {0} /* for git_zstream */ #define GIT_ZSTREAM_INIT {{0}} Side note: between { { 0 } } and {{0}} forms that appear in the existing code, I picked the "unusual spacing" variant, i.e. without any space, hoping that it would signal the fact that we would prefer if we didn't have to use these to please older compilers to the readers. Unless we plan to soon declare that clang 11 is too old to matter anymore, that is. The rule, tentatively until the compilers that need extra levels of braces die out, can be "if there is <name>_INIT for the type, you should use it, but otherwise you can do { 0 }", or something like that, perhaps?