Re: [PATCH] vcs-svn: Fix some compiler warnings
- From
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
- Date
- Feb 2, 2012, 18:24 UTC
- Message-ID
- <4F2AD4CF.7020303@ramsay1.demon.co.uk>
- In-Reply-To
- <20120131192053.GC12443@burratino>
Jonathan Nieder wrote:
Show 11 quoted lines
> Ramsay Jones wrote: > >> In particular, some versions of gcc complains as follows: >> >> CC vcs-svn/sliding_window.o >> vcs-svn/sliding_window.c: In function `check_overflow': >> vcs-svn/sliding_window.c:36: warning: comparison is always false \ >> due to limited range of data type > > Yuck. Suppressing this warning would presumably also suppress the > optimization that notices the comparison is always false.
I didn't check, but I would assume so. I would prefer not to loose any chance at optimizing the code, but in this case, given that we are talking about a fatal error path, I don't think it is much of a loss.
> The -Wtype-limits warning also triggers in some other perfectly > reasonable situations: see <http://gcc.gnu.org/PR51712>.
[...]
Show 6 quoted lines
>> Note that the "some versions of gcc" which complain includes 3.4.4 and >> 4.1.2, whereas gcc version 4.4.0 compiles the code without complaint. > > Thanks for tracking this down. Interesting. -Wtype-limits was split > out from the default set of warnings (!) in gcc 4.3 to address > <http://gcc.gnu.org/PR12963>, among other bugs (r124875, 2007-05-20).
Thanks for the above references, and for taking the time to track them down.
Show 19 quoted lines
> Is there some less ugly way to write the condition "if this value is
> not representable in this type"?
>
> I guess I could live with something like the following (please don't
> take the names too seriously):
>
> static inline off_t off_t_or_die(uintmax_t val, const char *msg_if_bad)
> {
> if (val > maximum_signed_value_of_type(off_t))
> die("%s", msg_if_bad);
> return (off_t) val;
> }
>
> ...
>
> off_t delta_len = off_t_or_die(len, "enormous delta");
> postimage_len = apply_delta(delta_len, input, ...);
>
> What do you think?An static inline function was actually my first thought (although I had something more like Junio's suggestion [elsewhere in this thread] in mind), but I didn't want to place it in git-compat-util.h and could not find a suitable place in the vcs-svn directory.
Hmm, I will send a v2 patch along these lines ...
ATB, Ramsay Jones