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

Re: [PATCH] builtin/fsck.c: don't conflate "int" and "enum" in callback

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 1, 2021, 21:04 UTC
Message-ID
<xmqq8s3ts3ds.fsf@gitster.g>
In-Reply-To
<patch-1.1-f109a61b11-20210601T000433Z-avarab@gmail.com>
Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:
Show 13 quoted lines
> Fix a warning on AIX's xlc compiler that's been emitted since my
> a1aad71601a (fsck.h: use "enum object_type" instead of "int",
> 2021-03-28):
>
>     "builtin/fsck.c", line 805.32: 1506-068 (W) Operation between
>     types "int(*)(struct object*,enum object_type,void*,struct
>     fsck_options*)" and "int(*)(struct object*,int,void*,struct
>     fsck_options*)" is not allowed.
>
> I.e. it complains about us assigning a function with a prototype "int"
> where we're expecting "enum object_type". Enums are just ints in C,
> but it seems xlc is more picky than some about conflating them at the
> source level.

As others already have pointed out, xlc is correct and these warnings are perhaps useful. I'd just remove the last sentence while queuing, as "Enums are just ints in C" is only half a truth.

The constants like OBJ_COMMIT can be used as "int", but the type of an enum itself may not be the same as "int"---it can be narrower.

Show 7 quoted lines
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
>
> This is new in v2.32.0, so sending this during the rc phase, just a
> warning though, so unless you're using fatal warnings on that
> OS/platform it won't impact anything, and even then it's just a minor
> annoyance...
Thanks.
Show 17 quoted lines
>
>  builtin/fsck.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/fsck.c b/builtin/fsck.c
> index 87a99b0108..b42b6fe21f 100644
> --- a/builtin/fsck.c
> +++ b/builtin/fsck.c
> @@ -109,7 +109,8 @@ static int fsck_error_func(struct fsck_options *o,
>  
>  static struct object_array pending;
>  
> -static int mark_object(struct object *obj, int type, void *data, struct fsck_options *options)
> +static int mark_object(struct object *obj, enum object_type type,
> +		       void *data, struct fsck_options *options)
>  {
>  	struct object *parent = data;
Previous: René Scharfe
Message 5 of 5 in “builtin/fsck.c: don't conflate "int" and "enum" in callback”
  1. builtin/fsck.c: don't conflate "int" and "enum" in callbackÆvar Arnfjörð Bjarmason, Jun 1, 2021
  2. Johannes SixtJun 1, 2021
  3. Ævar Arnfjörð BjarmasonJun 1, 2021
  4. René ScharfeJun 1, 2021
  5. Junio C HamanoJun 1, 2021

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.