Re: [PATCH] Avoid gcc compiler warning
flat view
From: Johannes Schindelin <hidden>
Date: 2016-06-15 23:03:15
Subsystem:
the rest · Maintainer:
Linus Torvalds
Hi Peff, On Tue, 9 Dec 2014, Jeff King wrote:
On Mon, Dec 08, 2014 at 05:38:59PM +0100, Johannes Schindelin wrote:quoted
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 <redacted> --- 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