On Sat, May 7, 2022 at 11:42 AM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Carlo Marcelo Arenas Belón <carenas@xxxxxxxxx> writes: > > > On Fri, May 06, 2022 at 02:17:01PM -0700, Junio C Hamano wrote: > >> diff --git a/http.c b/http.c > >> index 229da4d148..85437b1980 100644 > >> --- a/http.c > >> +++ b/http.c > >> @@ -1367,6 +1367,9 @@ void run_active_slot(struct active_request_slot *slot) > >> select(max_fd+1, &readfds, &writefds, &excfds, &select_timeout); > >> } > >> } > >> + > >> + if (slot->finished == &finished) > >> + slot->finished = NULL; > > > > I am not completely sure yet (since I looked at it long ago and got > > sidetracked) but I think this might be optimized out (at least by gcc12) > > since it is technically UB, which is why it never "fixed" the warning. > > UB meaning "undefined behaviour"? Which part is? Taking the > address of an on-stack variable "finished"? > Comparing it with a > pointer that may or may not have been assigned/overwritten elsewhere > in a structure? it is not very intuitive, but using a pointer to a variable that is out of scope is UB, and in this case the value of slot->finished might point to an address that is not in our own stack (because it came from a different thread), hence undefined Carlo