On Tue, 4 Dec 2007, Max Laier wrote:

On Tuesday 04 December 2007, Alexey Dokuchaev wrote:
On Mon, Dec 03, 2007 at 04:57:33PM -0500, John Baldwin wrote:
On Monday 03 December 2007 10:24:52 am Dag-Erling Sm??rgrav wrote:
John Birrell <[EMAIL PROTECTED]> writes:
  Log:
  Fix strict alias warnings.

A much simpler solution (relative to the previous revision):

@@ -131,10 +131,10 @@
                sum += oddbyte;
        }
 /* "Pseudo-header" data */
-       ptr = (u_short *) & (pip->ip_dst);
+       ptr = (void *)&pip->ip_dst;
        sum += *ptr++;
        sum += *ptr;
-       ptr = (u_short *) & (pip->ip_src);
+       ptr = (void *)&pip->ip_src;
        sum += *ptr++;
        sum += *ptr;
        sum += htons((u_short) ntcp);

*ptr++ would choke since pointer arith on (void *) is undefined
AFAIK.

Um, ptr has type `u_short *', not `void *'.  The original cast was
used to break a warning (and to add 3 style bugs).  With stricter type
checking, it stopped "working".  Now the warning is broken by casting
to `void *' which removes all knowledge of alignment restrictions and
I suppose must relax aliasing rules (else `void *' couldn't be used
for anything).

I've been under impression that ++ on void * whould simply increase it
by one.

This is a gcc bugfeature.  It is disabled by -Wpointer-arith for FreeBSD
kernels.

wasn't that the reason why caddr_t exists?  i.e. pointer arithmetic on
void * is bad, but on caddr_t it's kinda okay.

caddr_t is just an old mistake in this area.  The kernel still hasn't
caught up with the post K&R-1 (1978) changes which introduced `void *'.
(A few places might need to represent "core" addresses that can't be
represented by `void *' due to separate address spaces or things like
PAE, but that problem is now handed by vm_^Woffset_t, vm_paddr_t and
vm_ooffset_t.  caddr_t = `char *' has never been able to handle it.
"core" mostly means "mapped", so the problem doesn't affect most uses
of caddr_t.)

Bruce
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to