git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] vcs-svn: Fix some compiler warnings

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Jan 31, 2012, 19:20 UTC
Message-ID
<20120131192053.GC12443@burratino>
In-Reply-To
<4F28378F.6080108@ramsay1.demon.co.uk>
Hi,
Ramsay Jones wrote:
Show 6 quoted lines
> 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.

The -Wtype-limits warning also triggers in some other perfectly reasonable situations: see <http://gcc.gnu.org/PR51712>. I wonder if we should keep a list of unreliable warnings somewhere (e.g., Meta/Make).

[...]
> 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).

[...]
Show 11 quoted lines
> --- a/vcs-svn/fast_export.c
> +++ b/vcs-svn/fast_export.c
> @@ -300,7 +300,8 @@ void fast_export_blob_delta(uint32_t mode,
>  				uint32_t len, struct line_buffer *input)
>  {
>  	long postimage_len;
> -	if (len > maximum_signed_value_of_type(off_t))
> +	uintmax_t delta_len = (uintmax_t) len;
> +	if (delta_len > maximum_signed_value_of_type(off_t))
>  		die("enormous delta");
>  	postimage_len = apply_delta((off_t) len, input, old_data, old_mode);

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?
Jonathan
Previous: Ramsay JonesNext: Junio C Hamano
Message 2 of 16 in “vcs-svn: Fix some compiler warnings”
  1. vcs-svn: Fix some compiler warningsRamsay Jones, Jan 31, 2012
  2. Jonathan NiederJan 31, 2012
  3. Junio C HamanoJan 31, 2012
  4. Junio C HamanoFeb 2, 2012
  5. 0/3 Re: [PATCH] vcs-svn: Fix some compiler warningsJonathan Nieder, Feb 2, 2012
  6. 1/3 vcs-svn: rename check_overflow arguments for clarityJonathan Nieder, Feb 2, 2012
  7. Dmitry IvankovFeb 2, 2012
  8. Jonathan NiederFeb 2, 2012
  9. David BarrFeb 2, 2012
  10. Jonathan NiederFeb 2, 2012
  11. Junio C HamanoFeb 2, 2012
  12. 2/3 vcs-svn: allow import of > 4GiB filesJonathan Nieder, Feb 2, 2012
  13. 3/3 vcs-svn: suppress a -Wtype-limits warningJonathan Nieder, Feb 2, 2012
  14. Ramsay JonesFeb 2, 2012
  15. Ramsay JonesFeb 2, 2012
  16. Jonathan NiederFeb 2, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.