Re: [PATCH 3/4] http.c: avoid danging pointer to local variable `finished`
- From
Junio C Hamano <gitster@pobox.com>
- Date
- May 24, 2022, 22:38 UTC
- Message-ID
- <xmqqczg2eeth.fsf@gitster.g>
- In-Reply-To
- <nycvar.QRO.7.76.6.2205242309160.352@tvgsbejvaqbjf.bet>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 11 quoted lines
> Hi Junio, > > On Tue, 24 May 2022, Junio C Hamano wrote: > >> The "clear slot->finished", by the way, is what I think is the right >> thing to do, especially that the objective is to squelch the false >> positive warning from a new compiler. If there is a way to annotate >> the line for the compiler to tell it not to warn about it, that would >> have been even better. > > We could do something like this:
Yuck.
Show 22 quoted lines
> -- snip --
> diff --git a/http.c b/http.c
> index b08795715f8a..2ac8d51d3668 100644
> --- a/http.c
> +++ b/http.c
> @@ -1365,7 +1365,14 @@ void run_active_slot(struct active_request_slot *slot)
> struct timeval select_timeout;
> int finished = 0;
>
> +#if __GNUC__ >= 12
> +#pragma GCC diagnostic push
> +#pragma GCC diagnostic ignored "-Wdangling-pointer"
> +#endif
> slot->finished = &finished;
> +#if __GNUC__ >= 12
> +#pragma GCC diagnostic pop
> +#endif
> while (!finished) {
> step_active_slots();
> -- snap --
>
> That's quite ugly, though. And what's worse, it is pretty unreadable, too.Yes, very ugly. Would an unconditional
slot->finished = NULL;
at the end squelch the warning?
Or there is a way to say "we make all warnings into errors with -Werror, but we do not want to turn this dangling-pointer warning to an error, because it has false positives"?
Or we could add "-Wno-dangling-pointer" globally, perhaps.