Re: [spice-protocol PATCH v1 11/12] macros: fix alignment issue reported by clang

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 05, 2015 at 02:23:25PM +0200, Victor Toso wrote:
> char_device.c:131:52: warning: cast from 'uint8_t *'
> (aka 'unsigned char *') to 'SpiceCharDeviceMsgToClientItem *'
> (aka 'struct SpiceCharDeviceMsgToClientItem *')
> increases required alignment from 1 to 8 [-Wcast-align]
> 
>  SpiceCharDeviceMsgToClientItem *msg_item = SPICE_CONTAINEROF(item,
>                                             ^~~~~~~~~~~~~~~~~~~~~~~
> 
> ../spice-common/spice-protocol/spice/macros.h:142:6: note: expanded
> from macro 'SPICE_CONTAINEROF'
> 
>  ((struct_type *)((uint8_t *)(ptr) - SPICE_OFFSETOF(struct_type, member)))
>   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ---
>  spice/macros.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/spice/macros.h b/spice/macros.h
> index dad029c..bc9b648 100644
> --- a/spice/macros.h
> +++ b/spice/macros.h
> @@ -140,7 +140,7 @@
>  #endif
>  
>  #define SPICE_CONTAINEROF(ptr, struct_type, member) \
> -    ((struct_type *)((uint8_t *)(ptr) - SPICE_OFFSETOF(struct_type, member)))
> +    ((struct_type *)(void *)((uint8_t *)(ptr) - SPICE_OFFSETOF(struct_type, member)))

For this one, you can rely on implicit cast from (void *) to any pointer
type, ie make the macro

-    ((struct_type *)((uint8_t *)(ptr) - SPICE_OFFSETOF(struct_type, member)))
+    ((void *)((uint8_t *)(ptr) - SPICE_OFFSETOF(struct_type, member)))

The alignement constraints of the returned struct should have been
taken into consideration when it was allocated, so the warning here
can be silenced as alignment should be right when casting back.

Christophe

Attachment: pgp06wWUhYIZa.pgp
Description: PGP signature

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]