All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] config.c: fix a compiler warning
@ 2014-04-16 14:13 Stepan Kasal
  2014-04-16 15:29 ` Jeff King
  0 siblings, 1 reply; 5+ messages in thread
From: Stepan Kasal @ 2014-04-16 14:13 UTC (permalink / raw)
  To: git

Date: Thu, 10 Apr 2014 16:37:15 +0200

This change fixes a gcc warning when building msysGit.
---
 config.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/config.c b/config.c
index 314d8ee..0b7e4f8 100644
--- a/config.c
+++ b/config.c
@@ -572,7 +572,7 @@ static void die_bad_number(const char *name, const char *value)
 
 int git_config_int(const char *name, const char *value)
 {
-	int ret;
+	int ret = 0;
 	if (!git_parse_int(value, &ret))
 		die_bad_number(name, value);
 	return ret;
@@ -580,7 +580,7 @@ int git_config_int(const char *name, const char *value)
 
 int64_t git_config_int64(const char *name, const char *value)
 {
-	int64_t ret;
+	int64_t ret = 0;
 	if (!git_parse_int64(value, &ret))
 		die_bad_number(name, value);
 	return ret;
-- 
1.9.2.msysgit.0.154.g978f18d

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

* Re: [PATCH] config.c: fix a compiler warning
  2014-04-16 14:13 [PATCH] config.c: fix a compiler warning Stepan Kasal
@ 2014-04-16 15:29 ` Jeff King
  2014-04-16 16:38   ` Torsten Bögershausen
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff King @ 2014-04-16 15:29 UTC (permalink / raw)
  To: git

On Wed, Apr 16, 2014 at 04:13:53PM +0200, Stepan Kasal wrote:

> Date: Thu, 10 Apr 2014 16:37:15 +0200
> 
> This change fixes a gcc warning when building msysGit.

What warning? I'm assuming -Wuninitialized?

> diff --git a/config.c b/config.c
> index 314d8ee..0b7e4f8 100644
> --- a/config.c
> +++ b/config.c
> @@ -572,7 +572,7 @@ static void die_bad_number(const char *name, const char *value)
>  
>  int git_config_int(const char *name, const char *value)
>  {
> -	int ret;
> +	int ret = 0;
>  	if (!git_parse_int(value, &ret))
>  		die_bad_number(name, value);
>  	return ret;

Hmph. Generally gcc should assume that a variable is initialized after a
pointer to it is passed into a function. Unless it inlines that function
and can see that it isn't. But if we do inline git_parse_int, we see
that it "ret" is always initialized if it returns non-zero.

If it also inlines die_bad_number, it would see that we end in die(),
which is marked NORETURN. But if it does not, it will not realize that
we do not get to "return ret" in that case.

So perhaps a better solution is:

diff --git a/config.c b/config.c
index 6821cef..a30cb5c 100644
--- a/config.c
+++ b/config.c
@@ -557,6 +557,7 @@ int git_parse_ulong(const char *value, unsigned long *ret)
 	return 1;
 }
 
+NORETURN
 static void die_bad_number(const char *name, const char *value)
 {
 	const char *reason = errno == ERANGE ?

Does that also silence the warning?

-Peff

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

* Re: [PATCH] config.c: fix a compiler warning
  2014-04-16 15:29 ` Jeff King
@ 2014-04-16 16:38   ` Torsten Bögershausen
  2014-04-16 16:51     ` [PATCH] config.c: mark die_bad_number as NORETURN Jeff King
  0 siblings, 1 reply; 5+ messages in thread
From: Torsten Bögershausen @ 2014-04-16 16:38 UTC (permalink / raw)
  To: Jeff King, git, kasal

On 2014-04-16 17.29, Jeff King wrote:
> On Wed, Apr 16, 2014 at 04:13:53PM +0200, Stepan Kasal wrote:
> 
>> Date: Thu, 10 Apr 2014 16:37:15 +0200
>>
>> This change fixes a gcc warning when building msysGit.

[]
> +NORETURN
>  static void die_bad_number(const char *name, const char *value)
>  {
>  	const char *reason = errno == ERANGE ?
> 
> Does that also silence the warning?
> 
> -Peff
This works under gcc 4.2.1 Mac OS: the warning is away.

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

* [PATCH] config.c: mark die_bad_number as NORETURN
  2014-04-16 16:38   ` Torsten Bögershausen
@ 2014-04-16 16:51     ` Jeff King
  2014-04-16 17:21       ` Junio C Hamano
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff King @ 2014-04-16 16:51 UTC (permalink / raw)
  To: Torsten Bögershausen; +Cc: Junio C Hamano, git, kasal

On Wed, Apr 16, 2014 at 06:38:19PM +0200, Torsten Bögershausen wrote:

> > Does that also silence the warning?
> > 
> This works under gcc 4.2.1 Mac OS: the warning is away.

Thanks. I couldn't test myself, as I could not get gcc to generate the
warning in the first place, but I do not have anything as old as 4.2 on
hand.

Here it is with a commit message.

-- >8 --
Subject: config.c: mark die_bad_number as NORETURN

This can help avoid -Wuninitialized false positives in
git_config_int and git_config_ulong, as the compiler now
knows that we do not return "ret" if we hit the error
codepath.

Signed-off-by: Jeff King <peff@peff.net>
---
 config.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/config.c b/config.c
index 6821cef..a30cb5c 100644
--- a/config.c
+++ b/config.c
@@ -557,6 +557,7 @@ int git_parse_ulong(const char *value, unsigned long *ret)
 	return 1;
 }
 
+NORETURN
 static void die_bad_number(const char *name, const char *value)
 {
 	const char *reason = errno == ERANGE ?
-- 
1.9.1.656.ge8a0637

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

* Re: [PATCH] config.c: mark die_bad_number as NORETURN
  2014-04-16 16:51     ` [PATCH] config.c: mark die_bad_number as NORETURN Jeff King
@ 2014-04-16 17:21       ` Junio C Hamano
  0 siblings, 0 replies; 5+ messages in thread
From: Junio C Hamano @ 2014-04-16 17:21 UTC (permalink / raw)
  To: Jeff King; +Cc: Torsten Bögershausen, git, kasal

Jeff King <peff@peff.net> writes:

> On Wed, Apr 16, 2014 at 06:38:19PM +0200, Torsten Bögershausen wrote:
>
>> > Does that also silence the warning?
>> > 
>> This works under gcc 4.2.1 Mac OS: the warning is away.
>
> Thanks. I couldn't test myself, as I could not get gcc to generate the
> warning in the first place, but I do not have anything as old as 4.2 on
> hand.
>
> Here it is with a commit message.
>
> -- >8 --
> Subject: config.c: mark die_bad_number as NORETURN
>
> This can help avoid -Wuninitialized false positives in
> git_config_int and git_config_ulong, as the compiler now
> knows that we do not return "ret" if we hit the error
> codepath.

Thanks for clearly solving the issue and describing the solution.
Will queue.

> Signed-off-by: Jeff King <peff@peff.net>
> ---
>  config.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/config.c b/config.c
> index 6821cef..a30cb5c 100644
> --- a/config.c
> +++ b/config.c
> @@ -557,6 +557,7 @@ int git_parse_ulong(const char *value, unsigned long *ret)
>  	return 1;
>  }
>  
> +NORETURN
>  static void die_bad_number(const char *name, const char *value)
>  {
>  	const char *reason = errno == ERANGE ?

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

end of thread, other threads:[~2014-04-16 17:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-16 14:13 [PATCH] config.c: fix a compiler warning Stepan Kasal
2014-04-16 15:29 ` Jeff King
2014-04-16 16:38   ` Torsten Bögershausen
2014-04-16 16:51     ` [PATCH] config.c: mark die_bad_number as NORETURN Jeff King
2014-04-16 17:21       ` Junio C Hamano

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.