Eric Blake wrote:
> @@ -683,7 +684,9 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt 
> LOCALE_PARAM)
>                ++rp;
>              if (*rp != '+' && *rp != '-')
>                return NULL;
> +#if defined _LIBC || HAVE_TM_GMTOFF
>              neg = *rp++ == '-';
> +#endif
>              n = 0;
>              while (n < 4 && *rp >= '0' && *rp <= '9')
>                {

Here you need to pull the side effect of the statement outside the #if.

gcc would have done this optimization correctly. If you do it by hand,
you have a risk of introducing bugs. That's why -Wunused-but-set-variable
is not a good warning to enable all the time: It's the compiler's job
to eliminate unused variables.

I don't want a compiler that warns about each and every optimization it
performs, because such pickiness means that I have to write code at a
lower level, with more manual micro-optimizations, than I really want to.

Imagine if gcc had a warning to signal that a loop is only performed once
(and thus the 'for/do/while' around it is not needed). It would make it
impossible to use the   do { ... } while (0)  idiom.

Bruno


Reply via email to