This series removes 687 '-Wsign-compare' warnings when applied to the current master branch (@ commit 59c0ea183). Using gcc v5.4.0 and adding '-Wextra' to the compilation flags, we can summarize the warnings as follows: $ grep warning out1 | sed -e 's/.*\[/\[/' | sort | uniq -c | sort -rn 1437 [-Wunused-parameter] 1410 [-Wsign-compare] 670 [-Wmissing-field-initializers] 7 [-Wempty-body] $ After applying this series, we see: $ grep warning out2 | sed -e 's/.*\[/\[/' | sort | uniq -c | sort -rn 1437 [-Wunused-parameter] 723 [-Wsign-compare] 670 [-Wmissing-field-initializers] 7 [-Wempty-body] $ The number of -Wunused-parameter warnings is not as bad as it seems; for example, we can get rid of 690 such warning with the following patch: $ git diff diff --git a/git-compat-util.h b/git-compat-util.h index cedad4d58..8e7388082 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -118,6 +118,9 @@ /* Approximation of the length of the decimal representation of this type. */ #define decimal_length(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1) +/* suppress 'unused parameter' warnings */ +#define UNUSED(x) ((void)(x)) + #if defined(__sun__) /* * On Solaris, when _XOPEN_EXTENDED is set, its header file @@ -341,6 +344,7 @@ typedef uintmax_t timestamp_t; #ifndef has_dos_drive_prefix static inline int git_has_dos_drive_prefix(const char *path) { + UNUSED(path); return 0; } #define has_dos_drive_prefix git_has_dos_drive_prefix @@ -349,6 +353,7 @@ static inline int git_has_dos_drive_prefix(const char *path) #ifndef skip_dos_drive_prefix static inline int git_skip_dos_drive_prefix(char **path) { + UNUSED(path); return 0; } #define skip_dos_drive_prefix git_skip_dos_drive_prefix $ $ grep warning out3 | sed -e 's/.*\[/\[/' | sort | uniq -c | sort -rn 747 [-Wunused-parameter] 723 [-Wsign-compare] 670 [-Wmissing-field-initializers] 7 [-Wempty-body] $ The original version of the UNUSED macro used the gcc __unused__ attribute, but that caused some issues with msvc IIRC, so this version has been simplified. I have been meaning to check that this does not cause any bloat in the git executable (with all optimisation levels), so I haven't submitted it before. What do you think? These patches reduce the error count quite a bit, without touching too many files, but additional patches may have to be batched up and submitted over several releases, viz: $ grep warning out2 | cut -d: -f1 | sort | uniq | wc -l 264 $ Ramsay Jones (4): git-compat-util.h: xsize_t() - avoid -Wsign-compare warnings commit-slab.h: avoid -Wsign-compare warnings cache.h: hex2chr() - avoid -Wsign-compare warnings ALLOC_GROW: avoid -Wsign-compare warnings builtin/pack-objects.c | 4 ++-- cache.h | 4 ++-- commit-slab.h | 6 +++--- config.c | 2 +- diff.c | 2 +- git-compat-util.h | 6 ++++-- line-log.c | 18 +++++++++--------- line-log.h | 2 +- revision.c | 2 +- tree-walk.c | 3 +-- 10 files changed, 25 insertions(+), 24 deletions(-) -- 2.14.0