Browse Source

silence some -Wuninitialized false positives

There are a few error functions that simply wrap error() and
provide a standardized message text. Like error(), they
always return -1; knowing that can help the compiler silence
some false positive -Wuninitialized warnings.

One strategy would be to just declare these as inline in the
header file so that the compiler can see that they always
return -1. However, gcc does not always inline them (e.g.,
it will not inline opterror, even with -O3), which renders
our change pointless.

Instead, let's follow the same route we did with error() in
the last patch, and define a macro that makes the constant
return value obvious to the compiler.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 12 years ago committed by Junio C Hamano
parent
commit
a469a10193
  1. 3
      cache.h
  2. 1
      config.c
  3. 18
      parse-options.c
  4. 4
      parse-options.h

3
cache.h

@ -1136,6 +1136,9 @@ extern int check_repository_format_version(const char *var, const char *value, v @@ -1136,6 +1136,9 @@ 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__
#define config_error_nonbool(s) (config_error_nonbool(s), -1)
#endif
extern const char *get_log_output_encoding(void);
extern const char *get_commit_output_encoding(void);


1
config.c

@ -1660,6 +1660,7 @@ int git_config_rename_section(const char *old_name, const char *new_name) @@ -1660,6 +1660,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").
*/
#undef config_error_nonbool
int config_error_nonbool(const char *var)
{
return error("Missing value for '%s'", var);

18
parse-options.c

@ -18,15 +18,6 @@ int optbug(const struct option *opt, const char *reason) @@ -18,15 +18,6 @@ int optbug(const struct option *opt, const char *reason)
return error("BUG: switch '%c' %s", opt->short_name, reason);
}

int opterror(const struct option *opt, const char *reason, int flags)
{
if (flags & OPT_SHORT)
return error("switch `%c' %s", opt->short_name, reason);
if (flags & OPT_UNSET)
return error("option `no-%s' %s", opt->long_name, reason);
return error("option `%s' %s", opt->long_name, reason);
}

static int get_arg(struct parse_opt_ctx_t *p, const struct option *opt,
int flags, const char **arg)
{
@ -594,3 +585,12 @@ static int parse_options_usage(struct parse_opt_ctx_t *ctx, @@ -594,3 +585,12 @@ static int parse_options_usage(struct parse_opt_ctx_t *ctx,
return usage_with_options_internal(ctx, usagestr, opts, 0, err);
}

#undef opterror
int opterror(const struct option *opt, const char *reason, int flags)
{
if (flags & OPT_SHORT)
return error("switch `%c' %s", opt->short_name, reason);
if (flags & OPT_UNSET)
return error("option `no-%s' %s", opt->long_name, reason);
return error("option `%s' %s", opt->long_name, reason);
}

4
parse-options.h

@ -177,6 +177,10 @@ extern NORETURN void usage_msg_opt(const char *msg, @@ -177,6 +177,10 @@ 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__
#define opterror(o,r,f) (opterror((o),(r),(f)), -1)
#endif

/*----- incremental advanced APIs -----*/

enum {

Loading…
Cancel
Save