> > 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 > Note however that this patch does not allows code (perhaps ugly but currently working) like struct Point { int x, y }; Point pt = { 1, 2 }; int *x_p = &pt.x; SPICE_CONTAINEROF(x_p, struct Point, x)->y = 4; Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel