[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] fix gcc4 compile warnings
From: |
andrzej zaborowski |
Subject: |
Re: [Qemu-devel] [PATCH] fix gcc4 compile warnings |
Date: |
Fri, 30 Nov 2007 15:30:40 +0100 |
On 30/11/2007, Andre Przywara <address@hidden> wrote:
> > These casts are not the right way to get rid of the warnings, as are
> > some of the casts in other files in qemu_put_* and qemu_get_*
> > arguments. In this case the warnings are true positives and the bugs
> > causing the warnings have to be addressed instead of just the
> > warnings.
>
> Are you sure of that? Most of the fixes are like this:
> >> - qemu_put_be32s(f, &s->count_shift);
> >> + qemu_put_be32s(f, (uint32_t *)&s->count_shift);
> qemu_put_be32s is (QEMUFile *f, const uint32_t *pv), but after all the
> 2nd argument is only a _pointer_ to an unsigned variable, the size is
> the same (thanks to the C99 explicit types).
count_shift is an int so it is the machine word size, not necesarily
32-bit AFAIK. Otherwise I guess gcc wouldn't warn. You can possibly
use:
qemu_put_be32(f, s->count_shift);
Or point qemu_put_be32_s() to a int32_t/uint32_t variable.
>
> What solution do you prefer for the opaque types? I have used the simple:
> >> - void *args[MAX_ARGS];
> >> + intptr_t args[MAX_ARGS];
> A more portable and clean solution would be this:
> - void *args[MAX_ARGS];
> + union
> + {
> + void* ptr;
> + int i;
> + } args[MAX_ARGS];
> If you prefer this, I can change the patch accordingly.
I'm not sure why you get a warning here and I'm unable to run a build
at the moment. A void * should be able to store some (unknown size)
integer regardless of the platform.
Regards