Re: [PATCH] parse-options: fix SunCC compiler warning
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Dec 10, 2018, 06:36 UTC
- Message-ID
- <xmqqy38xkhvd.fsf@gitster-ct.c.googlers.com>
- In-Reply-To
- <20181209102724.8707-1-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
Show 8 quoted lines
> The compiler reports this because show_gitcomp() never actually > returns a value: > > "parse-options.c", line 520: warning: Function has no return > statement : show_gitcomp > > The function calls exit() and will never return. Update and mark it > NORETURN.
Yuck. This should do for now, but I am not impressed by the choice to hook show_gitcomp() call into parse_options_step(), which forces such an abnormal exit deeper in the callchain [*1*]. For readers (not compilers), it would help to have a comment at the caller that says that show_gitcomp() never returns and exits.
side note #1. Perhaps parse_options_start() would have been a better place, instead of parse_options_step() that is repeatedly called in a loop and itself has a loop. ANd worse yet, the check is done inside the loop even though the call is to be made only when the --git-completion-helper option is given as the sole request.
Thanks.
Show 30 quoted lines
> Reported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> parse-options.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/parse-options.c b/parse-options.c
> index 3b874a83a0..6577e52f63 100644
> --- a/parse-options.c
> +++ b/parse-options.c
> @@ -474,8 +474,8 @@ static void show_negated_gitcomp(const struct option *opts, int nr_noopts)
> }
> }
>
> -static int show_gitcomp(struct parse_opt_ctx_t *ctx,
> - const struct option *opts)
> +static void NORETURN show_gitcomp(struct parse_opt_ctx_t *ctx,
> + const struct option *opts)
> {
> const struct option *original_opts = opts;
> int nr_noopts = 0;
> @@ -550,7 +550,7 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
>
> /* lone --git-completion-helper is asked by git-completion.bash */
> if (ctx->total == 1 && !strcmp(arg + 1, "-git-completion-helper"))
> - return show_gitcomp(ctx, options);
> + show_gitcomp(ctx, options);
>
> if (arg[1] != '-') {
> ctx->opt = arg + 1;