All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Avoid gcc compiler warning
       [not found] <cover.1418056722.git.johannes.schindelin@gmx.de>
@ 2014-12-08 16:38 ` Johannes Schindelin
  2014-12-09  8:47   ` Jeff King
  0 siblings, 1 reply; 3+ messages in thread
From: Johannes Schindelin @ 2014-12-08 16:38 UTC (permalink / raw)
  To: gitster; +Cc: git

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.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 test-hashmap.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/test-hashmap.c b/test-hashmap.c
index 07aa7ec..40a126d 100644
--- a/test-hashmap.c
+++ b/test-hashmap.c
@@ -62,6 +62,8 @@ static unsigned int hash(unsigned int method, unsigned int i, const char *key)
 	case HASH_METHOD_0:
 		hash = 0;
 		break;
+	default:
+		die("Unknown method: %d", method);
 	}
 
 	if (method & HASH_METHOD_X2)
-- 
2.0.0.rc3.9669.g840d1f9

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] Avoid gcc compiler warning
  2014-12-08 16:38 ` [PATCH] Avoid gcc compiler warning Johannes Schindelin
@ 2014-12-09  8:47   ` Jeff King
  2014-12-09  9:48     ` Johannes Schindelin
  0 siblings, 1 reply; 3+ messages in thread
From: Jeff King @ 2014-12-09  8:47 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: gitster, git

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; we are switching on "method & 3", which
must be in the range 0-3 (and we cover all cases).

I do not mind silencing the warning anyway, but see this discussion:

  http://thread.gmane.org/gmane.comp.version-control.git/258186

The thread seems very broken in gmane, but it continues here:

  http://article.gmane.org/gmane.comp.version-control.git/258232

  http://thread.gmane.org/gmane.comp.version-control.git/258245

  http://article.gmane.org/gmane.comp.version-control.git/258264

-Peff

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Avoid gcc compiler warning
  2014-12-09  8:47   ` Jeff King
@ 2014-12-09  9:48     ` Johannes Schindelin
  0 siblings, 0 replies; 3+ messages in thread
From: Johannes Schindelin @ 2014-12-09  9:48 UTC (permalink / raw)
  To: Jeff King; +Cc: gitster, git

Hi Peff,

On Tue, 9 Dec 2014, Jeff King wrote:

> 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

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-12-09  9:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <cover.1418056722.git.johannes.schindelin@gmx.de>
2014-12-08 16:38 ` [PATCH] Avoid gcc compiler warning Johannes Schindelin
2014-12-09  8:47   ` Jeff King
2014-12-09  9:48     ` Johannes Schindelin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.