Date: Fri, 04 Mar 2011 00:54:53 -0600 Starting with gcc 4.5 (r147852, Pretty-ipa merge: Inliner heruistics reorg, 2009-05-25), gcc -O3 -Wall warns when building reflog_expire_config: warning: 'expire' may be used uninitialized in this function [-Wuninitialized] The cause: starting with that version, gcc realizes it can inline the call to parse_expire_cfg_value. In the error case, 'expire' is not initialized and the function returns early, but gcc does not have enough information to figure out that this is an error return. Squash the warning by letting the optimizer peek at the return value from config_error_nonbool. This also decreases the text size by a tiny (negligible) amount when building with -Os --- before: text data bss dec hex filename 1002184 24856 316928 1343968 1481e0 git After: text data bss dec hex filename 1002120 24856 316928 1343904 1481a0 git Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- Hi, Another patch that was sitting around in my tree. (I had the somewhat insane idea of turning on as many warnings as feasible and getting git to build with -Werror. The effect on running time for tests was encouraging but within noise.) While it might make sense to do something like this for error() itself, I don't know a clean and portable way to make a variadic macro or inline function. Anyway, maybe this can provide some amusement. cache.h | 8 +++++++- config.c | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cache.h b/cache.h index c4ef999..c8ce53a 100644 --- a/cache.h +++ b/cache.h @@ -1022,10 +1022,16 @@ 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 git_config_global(void); -extern int config_error_nonbool(const char *); extern const char *get_log_output_encoding(void); extern const char *get_commit_output_encoding(void); +extern void config_print_error_nonbool(const char *); +static inline int config_error_nonbool(const char *var) +{ + config_print_error_nonbool(var); + return -1; +} + extern const char *config_exclusive_filename; #define MAX_GITNAME (1000) diff --git a/config.c b/config.c index b94de8f..cf41c1c 100644 --- a/config.c +++ b/config.c @@ -1506,7 +1506,7 @@ int git_config_rename_section(const char *old_name, const char *new_name) * Call this to report error for your variable that should not * get a boolean value (i.e. "[my] var" means "true"). */ -int config_error_nonbool(const char *var) +void config_print_error_nonbool(const char *var) { - return error("Missing value for '%s'", var); + error("Missing value for '%s'", var); } -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html