* [PATCH] Initialise hash variable to prevent compiler warnings
@ 2014-10-13 14:37 Felipe Franciosi
2014-10-13 20:12 ` Junio C Hamano
0 siblings, 1 reply; 6+ messages in thread
From: Felipe Franciosi @ 2014-10-13 14:37 UTC (permalink / raw)
To: git; +Cc: Felipe Franciosi
The 'hash' variable in test-hashmap.c is not initialised properly
which causes some 'gcc' versions to complain during compilation.
Signed-off-by: Felipe Franciosi <felipe@paradoxo.org>
---
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:
--
1.7.10.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] Initialise hash variable to prevent compiler warnings
2014-10-13 14:37 [PATCH] Initialise hash variable to prevent compiler warnings Felipe Franciosi
@ 2014-10-13 20:12 ` Junio C Hamano
[not found] ` <CANxchRS1mGapb77hc9Ywqj_-8UeexSAWK4UK9y9M76pvoN-Yeg@mail.gmail.com>
0 siblings, 1 reply; 6+ messages in thread
From: Junio C Hamano @ 2014-10-13 20:12 UTC (permalink / raw)
To: Felipe Franciosi; +Cc: git
Felipe Franciosi <felipe@paradoxo.org> writes:
> The 'hash' variable in test-hashmap.c is not initialised properly
> which causes some 'gcc' versions to complain during compilation.
FNV/I/IDIV10/0 covers all the possibilities of (method & 3), I would
have to say that the compiler needs to be fixed.
Or insert "default:" just before "case HASH_METHOD_0:" line?
I dunno.
>
> Signed-off-by: Felipe Franciosi <felipe@paradoxo.org>
> ---
> 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:
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Initialise hash variable to prevent compiler warnings
[not found] ` <CANxchRS1mGapb77hc9Ywqj_-8UeexSAWK4UK9y9M76pvoN-Yeg@mail.gmail.com>
@ 2014-10-13 21:55 ` Felipe Franciosi
2014-10-14 1:13 ` Junio C Hamano
1 sibling, 0 replies; 6+ messages in thread
From: Felipe Franciosi @ 2014-10-13 21:55 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Mon, Oct 13, 2014 at 10:53 PM, Felipe Franciosi <felipe@paradoxo.org> wrote:
>
> On Mon, Oct 13, 2014 at 9:12 PM, Junio C Hamano <gitster@pobox.com> wrote:
>>
>> Felipe Franciosi <felipe@paradoxo.org> writes:
>>
>> > The 'hash' variable in test-hashmap.c is not initialised properly
>> > which causes some 'gcc' versions to complain during compilation.
>>
>> FNV/I/IDIV10/0 covers all the possibilities of (method & 3), I would
>> have to say that the compiler needs to be fixed.
>>
>> Or insert "default:" just before "case HASH_METHOD_0:" line?
>>
>> I dunno.
Hmm... The "default:" would work, but is it really that bad to
initialise a local variable in this case?
In any case, the compilation warning is annoying. Do you prefer the
default or the initialisation?
Cheers,
F.
>
>
> Hmm... The "default:" would work, but is it really that bad to initialise a
> local variable in this case?
>
> In any case, the compilation warning is annoying. Do you prefer the default
> or the initialisation?
>
> Cheers,
> F.
>
>>
>> >
>> > Signed-off-by: Felipe Franciosi <felipe@paradoxo.org>
>> > ---
>> > 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:
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Initialise hash variable to prevent compiler warnings
[not found] ` <CANxchRS1mGapb77hc9Ywqj_-8UeexSAWK4UK9y9M76pvoN-Yeg@mail.gmail.com>
2014-10-13 21:55 ` Felipe Franciosi
@ 2014-10-14 1:13 ` Junio C Hamano
2014-10-14 11:44 ` Felipe Franciosi
1 sibling, 1 reply; 6+ messages in thread
From: Junio C Hamano @ 2014-10-14 1:13 UTC (permalink / raw)
To: Felipe Franciosi; +Cc: Git Mailing List
On Mon, Oct 13, 2014 at 2:53 PM, Felipe Franciosi <felipe@paradoxo.org> wrote:
>
> On Mon, Oct 13, 2014 at 9:12 PM, Junio C Hamano <gitster@pobox.com> wrote:
>>
>> FNV/I/IDIV10/0 covers all the possibilities of (method & 3), I would
>> have to say that the compiler needs to be fixed.
>>
>> Or insert "default:" just before "case HASH_METHOD_0:" line?
>>
>> I dunno.
>
> Hmm... The "default:" would work, but is it really that bad to initialise a
> local variable in this case?
>
> In any case, the compilation warning is annoying. Do you prefer the default
> or the initialisation?
If I really had to choose between the two, adding a useless initialization
would be the less harmful choice. Adding a meaningless "default:" robs
another chance from the compilers to diagnose a future breakage we
might add (namely, we may extend methods and forget to write a
corresponding case arm for the new method value, which a smart
compiler can and do diagnose as a switch that does not handle
all the possible values.
Thanks.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Initialise hash variable to prevent compiler warnings
2014-10-14 1:13 ` Junio C Hamano
@ 2014-10-14 11:44 ` Felipe Franciosi
2014-10-14 16:41 ` Junio C Hamano
0 siblings, 1 reply; 6+ messages in thread
From: Felipe Franciosi @ 2014-10-14 11:44 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git Mailing List
On Tue, Oct 14, 2014 at 2:13 AM, Junio C Hamano <gitster@pobox.com> wrote:
> On Mon, Oct 13, 2014 at 2:53 PM, Felipe Franciosi <felipe@paradoxo.org> wrote:
>>
>> On Mon, Oct 13, 2014 at 9:12 PM, Junio C Hamano <gitster@pobox.com> wrote:
>>>
>>> FNV/I/IDIV10/0 covers all the possibilities of (method & 3), I would
>>> have to say that the compiler needs to be fixed.
>>>
>>> Or insert "default:" just before "case HASH_METHOD_0:" line?
>>>
>>> I dunno.
>>
>> Hmm... The "default:" would work, but is it really that bad to initialise a
>> local variable in this case?
>>
>> In any case, the compilation warning is annoying. Do you prefer the default
>> or the initialisation?
>
> If I really had to choose between the two, adding a useless initialization
> would be the less harmful choice. Adding a meaningless "default:" robs
> another chance from the compilers to diagnose a future breakage we
> might add (namely, we may extend methods and forget to write a
> corresponding case arm for the new method value, which a smart
> compiler can and do diagnose as a switch that does not handle
> all the possible values.
>
> Thanks.
I see your point; the code is correct today because it covers all
cases. Nevertheless, some versions of gcc (the one I used was 4.1.2
from CentOS 5.10 -- haven't tested others) might generate an annoying
warning.
Noting that, I also like my code to compile as cleanly as possible in
all environments that it might be used. Being a bit defensive in that
sense and initialising local variables is what I would do. On top of
that (and putting the compiler flaw aside for a moment), having it
sensibly initialised is another way of protecting the code against
errors introduced in the future.
What do you think?
Cheers,
F.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Initialise hash variable to prevent compiler warnings
2014-10-14 11:44 ` Felipe Franciosi
@ 2014-10-14 16:41 ` Junio C Hamano
0 siblings, 0 replies; 6+ messages in thread
From: Junio C Hamano @ 2014-10-14 16:41 UTC (permalink / raw)
To: Felipe Franciosi; +Cc: Git Mailing List
On Tue, Oct 14, 2014 at 4:44 AM, Felipe Franciosi <felipe@paradoxo.org> wrote:
> On Tue, Oct 14, 2014 at 2:13 AM, Junio C Hamano <gitster@pobox.com> wrote:
>>
>> If I really had to choose between the two, adding a useless initialization
>> would be the less harmful choice. Adding a meaningless "default:" robs
>> ...
> Being a bit defensive in that
> sense and initialising local variables is what I would do. On top of
> that (and putting the compiler flaw aside for a moment), having it
> sensibly initialised is another way of protecting the code against
> errors introduced in the future.
That is a false sense of safety. You will not know if the new method
introduced in the future would behave sensibly if the variable is left
in a state the blanket initialization created, so setting it to 0 upfront
is not really being defensive; you would rob compilers a chance
to notice something is amiss in the future code with the initialization,
just like a "default:" would. We need to accept that both are not about
being defensive but are ways to work around stupid compilers from
reporting false positives.
I am not saying that we should not do a work around. I am only
saying that it is wrong to try selling such a work around as a defensive
good practice, which is not.
> What do you think?
Again, if I really had to choose between the two, adding a useless
initialization would be the less harmful choice, as the other one has
an extra downside.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-10-14 16:47 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-13 14:37 [PATCH] Initialise hash variable to prevent compiler warnings Felipe Franciosi
2014-10-13 20:12 ` Junio C Hamano
[not found] ` <CANxchRS1mGapb77hc9Ywqj_-8UeexSAWK4UK9y9M76pvoN-Yeg@mail.gmail.com>
2014-10-13 21:55 ` Felipe Franciosi
2014-10-14 1:13 ` Junio C Hamano
2014-10-14 11:44 ` Felipe Franciosi
2014-10-14 16:41 ` Junio C Hamano
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).