Date: Sun, 27 May 2007 20:58:24 -0400 From: Alexander Kabaev <kabaev@gmail.com> To: Steve Kargl <sgk@troutmask.apl.washington.edu> Cc: Ed, freebsd-current@freebsd.org, Schouten <ed@fxq.nl>, Stefan Ehmann <shoesoft@gmx.net>, Kris Kennaway <kris@obsecurity.org> Subject: Re: HEADS-UP: gcc-4.2 import appears to miscompile libm. Message-ID: <20070527205824.481fc981@kan.dnsalias.net> In-Reply-To: <20070527193929.GA80582@troutmask.apl.washington.edu> References: <20070526193128.GB54875@troutmask.apl.washington.edu> <20070526190023.C98508@volatile.chemikals.org> <20070526233116.GA56054@troutmask.apl.washington.edu> <200705271053.10725.shoesoft@gmx.net> <20070527151840.GA73374@troutmask.apl.washington.edu> <20070527192825.GA79242@rot13.obsecurity.org> <20070527193929.GA80582@troutmask.apl.washington.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_acUmHozZMaz_0w8xIPpX8Vm Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Sun, 27 May 2007 12:39:29 -0700 Steve Kargl <sgk@troutmask.apl.washington.edu> wrote: > On Sun, May 27, 2007 at 03:28:25PM -0400, Kris Kennaway wrote: > > On Sun, May 27, 2007 at 08:18:40AM -0700, Steve Kargl wrote: > >> On Sun, May 27, 2007 at 10:53:09AM +0200, Stefan Ehmann wrote: > >>> On Sunday 27 May 2007 01:31:16 Steve Kargl wrote: > >>>> On Sat, May 26, 2007 at 07:09:16PM -0400, Wes Morgan wrote: > >>>>> Working from -O towards -O2 based on the info pages, I can > >>>>> "reproduce" the problem with "-O -fstrict-aliasing -fgcse"... > >>>>> However, -O2 with -fno-strict-aliasing by itself seems to work > >>>>> around the issue. At first glance it looks like a possible > >>>>> interaction between several optimizations. > >>>> > >>>> Ths patch fixes the problem. > >>>> > >>>> --- s_frexpf.c.orig Sat May 26 16:26:50 2007 > >>>> +++ s_frexpf.c Sat May 26 16:28:03 2007 > >>>> @@ -39,6 +39,9 @@ > >>>> } > >>>> *eptr +=3D (ix>>23)-126; > >>>> hx =3D (hx&0x807fffff)|0x3f000000; > >>>> +#if 0 > >>>> *(int*)&x =3D hx; > >>>> +#endif > >>>> + SET_FLOAT_WORD(x,hx); > >>>> return x; > >>>> } > >>>=20 > >>> -fno-strict-aliasing is used by default for me (i386). Also, if > >>> you use -Wall the compiler outputs a warning. > >>=20 > >> You apparently don't have CFLAGS set in /etc/make.conf. > >>=20 > >>> [root@something /usr/src/lib/msun/src]# cc -O2 -Wall -pipe -c > >>> s_frexpf.c s_frexpf.c: In function 'frexpf': > >>> s_frexpf.c:42: warning: dereferencing type-punned pointer will > >>> break strict-aliasing rules > >>=20 > >> Yes, I know. > >>=20 > >> OTOH, the above patch actually fixes the problem, and libm can then > >> be compiled without -fno-strict-aliasing. > >=20 > > OK, so just to confirm, it's not a miscompilation as originally > > suggested, but a code bug? > >=20 >=20 > Yes, it is a code bug. It is my understanding that C (C99?)=20 > considers "*(int*)&x =3D hx;" to be undefined behavior. From > what I've gleaned from the gcc IRC channel, gcc-4.2 now does > a "load and store" instead of a "store and load" (or vice versa). >=20 > Of course, the patch touches libm so be prepared to be brucified. >=20 That is more or less classic example of broken strict aliasing expectations. Thank you for finding it. --=20 Alexander Kabaev --Sig_acUmHozZMaz_0w8xIPpX8Vm Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (FreeBSD) iD8DBQFGWikwQ6z1jMm+XZYRAuynAJ9KlDka+C72VXj9yijJO7VPp9rBcQCfYmTu gcveXoWGWTSg1OSqpuXdpwI= =XVr+ -----END PGP SIGNATURE----- --Sig_acUmHozZMaz_0w8xIPpX8Vm--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070527205824.481fc981>