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

Re: [PATCH] Avoid gcc compiler warning

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Dec 9, 2014, 09:48 UTC
Message-ID
<alpine.DEB.1.00.1412091039130.13845@s15462909.onlinehome-server.info>
In-Reply-To
<20141209084728.GA13123@peff.net>
Hi Peff,
On Tue, 9 Dec 2014, Jeff King wrote:
Show 12 quoted lines
> On Mon, Dec 08, 2014 at 05:38:59PM +0100, Johannes Schindelin wrote:
> 
> > At least on this developer's MacOSX (Snow Leopard, gcc-4.2.1), GCC prints
> > a warning that 'hash' may be used uninitialized when compiling
> > test-hashmap that 'hash' may be used uninitialized (but GCC 4.6.3 on this
> > developer's Ubuntu server does not report this problem).
> > 
> > Since hash() is called from perf_hashmap() which accepts an unchecked
> > integer value from the command line, the warning appears to be legitimate,
> > even if the test-hashmap command is only called from the test suite.
> 
> I think the older gcc is wrong;

Thanks for pointing to the older thread. It just happened to make it inconvenient to develop the rather huge fsck api topic branch I submitted yesterday because my vi kept jumping to test-hashmap.c because of that compiler warning (and as you know, not everybody has the luxury of being able to upgrade their gcc *cough* *Xcode* *cough* *Snow Leopard*).

> we are switching on "method & 3", which must be in the range 0-3 (and we
> cover all cases).

That is of course correct, but still does not address the compiler warning.

Junio, you said that you would prefer the useless initialization, so here goes:

-- snipsnap --
Subject: [PATCH] Avoid gcc compiler warning

At least on this developer's MacOSX (Snow Leopard, gcc-4.2.1), GCC prints a warning that 'hash' may be used uninitialized when compiling test-hashmap that 'hash' may be used uninitialized (but GCC 4.6.3 on this developer's Ubuntu server does not report this problem).

The old compiler is wrong, of course, as the switch(method & 3) statement already handles all the possible cases, but that does not help in a scenario where it is hard or impossible to upgrade to a newer compiler (e.g. being stuck on an older MacOSX and having to rely on Xcode).

So let's just initialize the variable and be done with it, it is hardly a crucial part of the code because it is only used by the test suite and invisible to the end users.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 test-hashmap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test-hashmap.c b/test-hashmap.c
index 07aa7ec..cc2891d 100644
--- a/test-hashmap.c
+++ b/test-hashmap.c
@@ -47,7 +47,7 @@ static struct test_entry *alloc_test_entry(int hash,
char *key, int klen,
 
 static unsigned int hash(unsigned int method, unsigned int i, const char
*key)
 {
-	unsigned int hash;
+	unsigned int hash = 0;
 	switch (method & 3)
 	{
 	case HASH_METHOD_FNV:
-- 
2.0.0.rc3.9669.g840d1f9
Previous: Jeff King
Message 3 of 3 in “Avoid gcc compiler warning”
  1. Avoid gcc compiler warningJohannes Schindelin, Dec 8, 2014
  2. Jeff KingDec 9, 2014
  3. Johannes SchindelinDec 9, 2014

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.