On Tue, 21 Sep 2010, Brian Somers wrote:

On Mon, 20 Sep 2010 16:55:57 +1000 (EST) Bruce Evans <b...@optusnet.com.au> 
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
...

Maybe iobuf ought to go back to being a void * with casting where the
arithmetic happens.  If it's changed, newfs/mkfs.c should probably change
too.

Is there some subtle difference that makes the casting ok in newfs/mkfs.c:

   dp1 = (struct ufs1_dinode *)(&iobuf[start]);

and not ok in growfs/growfs.c r212885:

   dp1 = (struct ufs1_dinode *)iobuf;

or is it just ignored because WARNS is 3 for newfs and is defaulted to 6 for 
growfs?

Just because of WARNS.

The `caddr_t iobuf;' in newfs is really old and should be fixed someday.  It
is the only caddr_t remaining in newfs.  In Lite2, newfs also uses caddr_t
for its now-dead mfs parts, including for its replacements for the malloc()
family which were errors in theory even at the time of Lite2 and which are
now errors in practice.

Bruce
_______________________________________________
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"

Reply via email to