[Spice-devel] [spice-server PATCH v1 2/12] migration_protocol: fix alignment warnings on _MAGIC

Frediano Ziglio fziglio at redhat.com
Thu Aug 6 05:25:49 PDT 2015


> 
> from clang:
> inputs_channel.c:274:36: error: cast from 'const char *' to 'uint32_t *'
> (aka 'unsigned int *') increases required alignment from 1 to 4
> [-Werror,-Wcast-align]
>     spice_marshaller_add_uint32(m, SPICE_MIGRATE_DATA_INPUTS_MAGIC);
>                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ---
>  server/migration_protocol.h | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/server/migration_protocol.h b/server/migration_protocol.h
> index fa17c7c..8c5a9bf 100644
> --- a/server/migration_protocol.h
> +++ b/server/migration_protocol.h
> @@ -60,7 +60,7 @@ typedef struct __attribute__ ((__packed__))
> SpiceMigrateDataCharDevice {
>  
>  #define SPICE_MIGRATE_DATA_SPICEVMC_VERSION 1 /* NOTE: increase version when
>  CHAR_DEVICE_VERSION
>                                                   is increased */
> -#define SPICE_MIGRATE_DATA_SPICEVMC_MAGIC (*(uint32_t *)"SVMD")
> +#define SPICE_MIGRATE_DATA_SPICEVMC_MAGIC (*(uint32_t *)(void *)"SVMD")

Why don't define something like

#define SPICE_MAGIC(s) ((uint32_t)(s[0]+s[1]*0x100u+s[2]*0x10000u+s[3]*0x1000000u))

#define SPICE_MIGRATE_DATA_SPICEVMC_MAGIC SPICE_MAGIC("SVMD")

the compiler is able to remove all these pointers magic and produce a good constant.
Of course SPICE_MAGIC should be defined differently for big endian or a call to put
the constant in the right order should be fine.

Frediano


More information about the Spice-devel mailing list