diff options
author | Jeff King <peff@peff.net> | 2014-05-06 11:14:42 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-05-06 15:30:38 -0700 |
commit | 87fe5df3653cf20b6bf9854bea42e4016c7d4688 (patch) | |
tree | 305ccac4474a31bbdeb9025ed497089102972479 /git-compat-util.h | |
parent | 0bc85abb7aa9b24b093253018801a0fb43d01122 (diff) | |
download | git-87fe5df3653cf20b6bf9854bea42e4016c7d4688.tar.gz |
inline constant return from error() function
Commit e208f9c introduced a macro to turn error() calls
into:
(error(), -1)
to make the constant return value more visible to the
calling code (and thus let the compiler make better
decisions about the code).
This works well for code like:
return error(...);
but the "-1" is superfluous in code that just calls error()
without caring about the return value. In older versions of
gcc, that was fine, but gcc 4.9 complains with -Wunused-value.
We can work around this by encapsulating the constant return
value in a static inline function, as gcc specifically
avoids complaining about unused function returns unless the
function has been specifically marked with the
warn_unused_result attribute.
We also use the same trick for config_error_nonbool and
opterror, which learned the same error technique in a469a10.
Reported-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-compat-util.h')
-rw-r--r-- | git-compat-util.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/git-compat-util.h b/git-compat-util.h index d493a8c67a..90b988a5c1 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -343,7 +343,11 @@ extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2))) * using the function as usual. */ #if defined(__GNUC__) && ! defined(__clang__) -#define error(...) (error(__VA_ARGS__), -1) +static inline int const_error(void) +{ + return -1; +} +#define error(...) (error(__VA_ARGS__), const_error()) #endif extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params)); |