fix clang -Wunused-value warnings for error functions
authorMax Horn <max@quendi.de>
Wed, 16 Jan 2013 18:09:29 +0000 (10:09 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 16 Jan 2013 20:47:46 +0000 (12:47 -0800)
Commit a469a10 wraps some error calls in macros to give the
compiler a chance to do more static analysis on their
constant -1 return value.  We limit the use of these macros
to __GNUC__, since gcc is the primary beneficiary of the new
information, and because we use GNU features for handling
variadic macros.

However, clang also defines __GNUC__, but generates warnings
with -Wunused-value when these macros are used in a void
context, because the constant "-1" ends up being useless.
Gcc does not complain about this case (though it is unclear
if it is because it is smart enough to see what we are
doing, or too dumb to realize that the -1 is unused).  We
can squelch the warning by just disabling these macros when
clang is in use.

Signed-off-by: Max Horn <max@quendi.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
cache.h
git-compat-util.h
parse-options.h

diff --git a/cache.h b/cache.h
index 0e8e5d8002724451e1229bd61460486ac1d04cbd..98b62bcb5ae0c95db95a971bfa9ccaa2b1fcc8a0 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -1136,7 +1136,7 @@ extern int check_repository_format_version(const char *var, const char *value, v
 extern int git_env_bool(const char *, int);
 extern int git_config_system(void);
 extern int config_error_nonbool(const char *);
-#ifdef __GNUC__
+#if defined(__GNUC__) && ! defined(__clang__)
 #define config_error_nonbool(s) (config_error_nonbool(s), -1)
 #endif
 extern const char *get_log_output_encoding(void);
index 9002bca28e1a91d88a95b66e0a9a924880bb62a0..77fd848511675c2330214c9f72c3c8b3b7238da6 100644 (file)
@@ -295,7 +295,7 @@ extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)))
  * behavior. But since we're only trying to help gcc, anyway, it's OK; other
  * compilers will fall back to using the function as usual.
  */
-#ifdef __GNUC__
+#if defined(__GNUC__) && ! defined(__clang__)
 #define error(fmt, ...) (error((fmt), ##__VA_ARGS__), -1)
 #endif
 
index e703853749f0949c58cde0a27ff1d01991609400..1c8bd8d5a0894d9deda1e849165ff38e8d594a4d 100644 (file)
@@ -177,7 +177,7 @@ extern NORETURN void usage_msg_opt(const char *msg,
 
 extern int optbug(const struct option *opt, const char *reason);
 extern int opterror(const struct option *opt, const char *reason, int flags);
-#ifdef __GNUC__
+#if defined(__GNUC__) && ! defined(clang)
 #define opterror(o,r,f) (opterror((o),(r),(f)), -1)
 #endif