On Sep 19, 2010, at 11:55 PM, Bruce Evans wrote: > On Mon, 20 Sep 2010, Marcel Moolenaar wrote: > >> Log: >> Unbreak the build on strong-aligned architectures (arm, ia64). >> Casting from (char *) to (struct ufs1_dinode *) changes the >> alignment requirement of the pointer and GCC does not know that >> the pointer is adequately aligned (due to malloc(3)), and warns >> about it. Cast to (void *) first to by-pass the check. > > A previous version in which the pointer (iobuf) the correct type to > begin with was better. It used to have type void *, but now has type > caddr_t (whose existence is a bug), in order to abuse caddr_t by > assuming that it is char * to do pointer arithmetic on it in 1 place > (iobuf + sblock.fs_cgsize). The 7 other places where iobuf is used > only assume that caddr_t is a pointer (or perhaps a [u]intptr_t). > > growfs has no other instances of caddr_t.
My first instinct was to retype iobuf as (void *), but saw the pointer arithmetic and decided against it. If we had a macro that one can use to add X number of bytes to a pointer to any, I would have used that. Other macros to add X number of short, int, long, could be handy too, but that may not be as useful as for bytes. Would it be useful to add a macro like (don't mind the name): #define ADDBYTESTOPOINTER(ptr, cnt) \ ((__typeof(ptr))(void *)((uintptr_t)(void *)(ptr) + (cnt))) ? -- Marcel Moolenaar xcl...@mac.com _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"