Paul Eggert wrote: > diff --git a/lib/select.c b/lib/select.c > index 6b6ca4154c..991f475431 100644 > --- a/lib/select.c > +++ b/lib/select.c > @@ -516,7 +516,7 @@ restart: > goto restart; > } > if (timeout && wait_timeout == 0 && rc == 0) > - timeout->tv_sec = timeout->tv_usec = 0; > + timeout = (struct timeval) {0}; > } > > /* Now fill in the results. */
This produces a compilation error on native Windows: select.c(519): error C2440: '=': cannot convert from 'timeval' to 'rpl_timeval *' Changing the line to *timeout = (struct timeval) {0}; does not fix it: select.c(519): error C2440: '=': cannot convert from 'timeval' to 'rpl_timeval' The reason is that on native Windows, @REPLACE_STRUCT_TIMEVAL@ evaluates to 1, and thus gnulib's sys/time.h overrides 'struct timeval': # if @REPLACE_STRUCT_TIMEVAL@ # define timeval rpl_timeval # endif struct timeval { time_t tv_sec; long int tv_usec; }; # define GNULIB_defined_struct_timeval 1 Then select.c does #undef timeval It would be possible to fix this by writing #if GNULIB_defined_struct_timeval *timeout = (struct rpl_timeval) {0}; #else *timeout = (struct timeval) {0}; #endif but that is more complex than before. IMO, it is better to just ignore this warning if someone uses mingw with GCC ≥ 13. We don't attempt warning-free compilation on native Windows, and certainly not with extra compiler options like -Wanalyzer-use-of-uninitialized-value. 2023-05-15 Bruno Haible <br...@clisp.org> select: Fix compilation error (regression from yesterday). * lib/select.c (rpl_select): Revert last change. diff --git a/lib/select.c b/lib/select.c index 991f475431..6b6ca4154c 100644 --- a/lib/select.c +++ b/lib/select.c @@ -516,7 +516,7 @@ restart: goto restart; } if (timeout && wait_timeout == 0 && rc == 0) - timeout = (struct timeval) {0}; + timeout->tv_sec = timeout->tv_usec = 0; } /* Now fill in the results. */