Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Jul 2004 16:28:44 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        David Schultz <das@freebsd.org>
Cc:        Dag-Erling Smorgrav <des@freebsd.org>
Subject:   Re: cvs commit: src/lib/libalias alias.c
Message-ID:  <20040707161210.L3048@gamplex.bde.org>
In-Reply-To: <20040707022547.GA52027@VARK.homeunix.com>
References:  <200407060922.i669MJua014841@repoman.freebsd.org> <20040707022547.GA52027@VARK.homeunix.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 6 Jul 2004, David Schultz wrote:

> On Tue, Jul 06, 2004, Dag-Erling Smorgrav wrote:
> >   Rewrite twowords() to access its argument through a char pointer and not
> >   a short pointer.  The previous implementation seems to be in a gray zone
> >   of the C standard, and GCC generates incorrect code for it at -O2 or
> >   higher on some platforms.
>
> I don't think this is even a gray zone---the C standard
> specifically disallows aliasing of pointers to different types
> unless one of the types is a 'char *'.

It's grey in the gcc standard.  If there were a gcc standard, then it
should support accesses via pointers of different types if there are no
hardware [1] alignment problems, since Normal C programs do this, but
since there is no gcc standard no one really knows what gcc supports.

The C standard actually specifically allows aliasing of pointers
to different types if the access is through a pointer to a character
type.  The character type also needs to be unsigned char to avoid
the possibility of trap representations.

[1] gcc supports the packig and alignment attributes, so it must support
pointers to misaligned objects, at least if it silently discards attributes
when taking addresses like it does now.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040707161210.L3048>