https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79320
Bug ID: 79320
Summary: sqrt of negative number do not return NaN with
i686-w64-mingw32-gcc on pentiumI7/Windows10
Product: gcc
Version: 5.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: daniel.weil at argosim dot com
Target Milestone: ---
Created attachment 40644
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40644&action=edit
Compile me
With the cross-compiler i686-w64-mingw32-gcc.exe, on PentiumI7 with Windows10,
the sqrt function returns identity instead of NaN.
To reproduce the bug:
- on a Pentium I7 with windows10 (tried with recent DELL XPS13)
- install cygwin with the i686-w64-mingw32-gcc.exe cross-compiler
- compiler the attached file
~~~
$ i686-w64-mingw32-gcc.exe -o essai essai.c -v && ./essai
Utilisation des specs internes.
COLLECT_GCC=i686-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-w64-mingw32/5.4.0/lto-wrapper.exe
Cible : i686-w64-mingw32
Configuré avec:
/cygdrive/i/szsz/tmpp/cygwin64/mingw64-i686/mingw64-i686-gcc-5.4
.0-3.i686/src/gcc-5.4.0/configure
--srcdir=/cygdrive/i/szsz/tmpp/cygwin64/mingw6
4-i686/mingw64-i686-gcc-5.4.0-3.i686/src/gcc-5.4.0 --prefix=/usr
--exec-prefix=/ usr --localstatedir=/var
--sysconfdir=/etc --docdir=/usr/share/doc/mingw64-i686-
gcc --htmldir=/usr/share/doc/mingw64-i686-gcc/html -C
--build=i686-pc-cygwin --h ost=i686-pc-cygwin
--target=i686-w64-mingw32 --without-libiconv-prefix --without
-libintl-prefix --with-sysroot=/usr/i686-w64-mingw32/sys-root
--with-build-sysro
ot=/usr/i686-w64-mingw32/sys-root --disable-multilib --disable-win32-registry
--
enable-languages=c,ada,c++,fortran,lto,objc,obj-c++
--enable-fully-dynamic-strin g --enable-graphite
--enable-libgomp --enable-libquadmath --enable-libquadmath-s
upport --enable-libssp --enable-version-specific-runtime-libs
--with-dwarf2 --wi th-gnu-ld --with-gnu-as
--with-tune=generic --with-cloog-include=/usr/include/cl
oog-isl --with-system-zlib --enable-threads=posix --libexecdir=/usr/lib
Modèle de thread: posix
gcc version 5.4.0 (GCC)
COLLECT_GCC_OPTIONS='-o' 'essai.exe' '-v' '-mtune=generic' '-march=pentiumpro'
/usr/lib/gcc/i686-w64-mingw32/5.4.0/cc1.exe -quiet -v -D_REENTRANT essai.c
-qui et -dumpbase essai.c -mtune=generic
-march=pentiumpro -auxbase essai -version -o
/tmp/ccbqPl1C.s
GNU C11 (GCC) version 5.4.0 (i686-w64-mingw32)
compilé par GNU C version 5.4.0, GMP version 6.1.0, MPFR version 3.1.4,
MPC version 1.0.3
warning: GMP header version 6.1.0 differs from library version 6.1.2.
warning: MPFR header version 3.1.4 differs from library version 3.1.5.
heuristiques GGC: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
le répertoire « /usr/i686-w64-mingw32/sys-root/usr/local/include » est ignoré
ca r inexistant
le répertoire «
/usr/lib/gcc/i686-w64-mingw32/5.4.0/../../../../i686-w64-mingw32
/include » est ignoré car inexistant
la recherche pour #include "..." débute ici :
la recherche pour #include <...> débute ici:
/usr/lib/gcc/i686-w64-mingw32/5.4.0/include
/usr/lib/gcc/i686-w64-mingw32/5.4.0/include-fixed
/usr/i686-w64-mingw32/sys-root/mingw/include
Fin de la liste de recherche.
GNU C11 (GCC) version 5.4.0 (i686-w64-mingw32)
compilé par GNU C version 5.4.0, GMP version 6.1.0, MPFR version 3.1.4,
MPC version 1.0.3
warning: GMP header version 6.1.0 differs from library version 6.1.2.
warning: MPFR header version 3.1.4 differs from library version 3.1.5.
heuristiques GGC: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 94288b9bd2212c08d70115a290bc41ca
COLLECT_GCC_OPTIONS='-o' 'essai.exe' '-v' '-mtune=generic' '-march=pentiumpro'
/usr/lib/gcc/i686-w64-mingw32/5.4.0/../../../../i686-w64-mingw32/bin/as.exe -v
-o /tmp/ccDzZTqz.o /tmp/ccbqPl1C.s
Version de l'assembleur GNU 2.25.51 (i686-w64-mingw32) utilisant la version BFD
(GNU Binutils) 2.25.51.20150320
COMPILER_PATH=/usr/lib/gcc/i686-w64-mingw32/5.4.0/:/usr/lib/gcc/i686-w64-mingw32
/5.4.0/:/usr/lib/gcc/i686-w64-mingw32/:/usr/lib/gcc/i686-w64-mingw32/5.4.0/:/usr
/lib/gcc/i686-w64-mingw32/:/usr/lib/gcc/i686-w64-mingw32/5.4.0/../../../../i686-
w64-mingw32/bin/
LIBRARY_PATH=/usr/lib/gcc/i686-w64-mingw32/5.4.0/:/usr/lib/gcc/i686-w64-mingw32/
5.4.0/../../../../i686-w64-mingw32/lib/../lib/:/usr/i686-w64-mingw32/sys-root/mi
ngw/lib/../lib/:/usr/lib/gcc/i686-w64-mingw32/5.4.0/../../../../i686-w64-mingw32
/lib/:/usr/i686-w64-mingw32/sys-root/mingw/lib/
COLLECT_GCC_OPTIONS='-o' 'essai.exe' '-v' '-mtune=generic' '-march=pentiumpro'
/usr/lib/gcc/i686-w64-mingw32/5.4.0/collect2.exe -plugin
/usr/lib/gcc/i686-w64-
mingw32/5.4.0/cyglto_plugin-0.dll
-plugin-opt=/usr/lib/gcc/i686-w64-mingw32/5.4.
0/lto-wrapper.exe -plugin-opt=-fresolution=/tmp/ccYN2qLl.res
-plugin-opt=-pass-t hrough=-lmingw32
-plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc
_eh -plugin-opt=-pass-through=-lmoldname
-plugin-opt=-pass-through=-lmingwex -pl
ugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread
-plugin-opt= -pass-through=-ladvapi32
-plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-t
hrough=-luser32 -plugin-opt=-pass-through=-lkernel32
-plugin-opt=-pass-through=- lmingw32
-plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plu
gin-opt=-pass-through=-lmoldname
-plugin-opt=-pass-through=-lmingwex -plugin-opt
=-pass-through=-lmsvcrt --sysroot=/usr/i686-w64-mingw32/sys-root -m i386pe
-Bdyn amic -o essai.exe
/usr/i686-w64-mingw32/sys-root/mingw/lib/../lib/crt2.o /usr/li
b/gcc/i686-w64-mingw32/5.4.0/crtbegin.o
-L/usr/lib/gcc/i686-w64-mingw32/5.4.0 -L
/usr/lib/gcc/i686-w64-mingw32/5.4.0/../../../../i686-w64-mingw32/lib/../lib
-L/u
sr/i686-w64-mingw32/sys-root/mingw/lib/../lib
-L/usr/lib/gcc/i686-w64-mingw32/5.
4.0/../../../../i686-w64-mingw32/lib -L/usr/i686-w64-mingw32/sys-root/mingw/lib
/tmp/ccDzZTqz.o -lmingw32 -lgcc -lgcc_eh
-lmoldname -lmingwex -lmsvcrt -lpthread
-ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -l
mingwex -lmsvcrt
/usr/i686-w64-mingw32/sys-root/mingw/lib/../lib/default-manifes
t.o /usr/lib/gcc/i686-w64-mingw32/5.4.0/crtend.o
sqrt(-2.000000)=-2.000000, is nan : 0
acos(-2.000000)=-1.#IND00, is nan : 1
sqrt(-1.500000)=-1.500000, is nan : 0
acos(-1.500000)=-1.#IND00, is nan : 1
sqrt(-1.000000)=-1.000000, is nan : 0
acos(-1.000000)=3.141593, is nan : 0
sqrt(-0.500000)=-0.500000, is nan : 0
acos(-0.500000)=2.094395, is nan : 0
sqrt(0.000000)=0.000000, is nan : 0
acos(0.000000)=1.570796, is nan : 0
sqrt(0.500000)=0.707107, is nan : 0
acos(0.500000)=1.047198, is nan : 0
sqrt(1.000000)=1.000000, is nan : 0
acos(1.000000)=0.000000, is nan : 0
sqrt(1.500000)=1.224745, is nan : 0
acos(1.500000)=-1.#IND00, is nan : 1
sqrt(2.000000)=1.414214, is nan : 0
acos(2.000000)=-1.#IND00, is nan : 1
~~~
* and observe that the acos function returns NaN for absolute value above 1,
but sqrt (x) returns x for negative value!!!!
The bug is processor-dependant and seems to happen only with last version of
gcc.
Configuration used :
~~~
$ uname -a
CYGWIN_NT-10.0-WOW PC-Daniel-ARGOSIM 2.6.1(0.305/5/3) 2016-12-16 11:50 i686
Cygwin
Windows Config:
C:\Users\daniel>ver
Microsoft Windows [version 10.0.14393]
gcc:
$ i686-w64-mingw32-gcc.exe -v
Utilisation des specs internes.
COLLECT_GCC=i686-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-w64-mingw32/5.4.0/lto-wrapper.exe
Cible : i686-w64-mingw32
Configuré avec:
/cygdrive/i/szsz/tmpp/cygwin64/mingw64-i686/mingw64-i686-gcc-5.4.0-3.i686/src/gcc-5.4.0/configure
--srcdir=/cygdrive/i/szsz/tmpp/cygwin64/mingw64-i686/mingw64-i686-gcc-5.4.0-3.i686/src/gcc-5.4.0
--prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc
--docdir=/usr/share/doc/mingw64-i686-gcc
--htmldir=/usr/share/doc/mingw64-i686-gcc/html -C --build=i686-pc-cygwin
--host=i686-pc-cygwin --target=i686-w64-mingw32 --without-libiconv-prefix
--without-libintl-prefix --with-sysroot=/usr/i686-w64-mingw32/sys-root
--with-build-sysroot=/usr/i686-w64-mingw32/sys-root --disable-multilib
--disable-win32-registry --enable-languages=c,ada,c++,fortran,lto,objc,obj-c++
--enable-fully-dynamic-string --enable-graphite --enable-libgomp
--enable-libquadmath --enable-libquadmath-support --enable-libssp
--enable-version-specific-runtime-libs --with-dwarf2 --with-gnu-ld
--with-gnu-as --with-tune=generic --with-cloog-include=/usr/include/cloog-isl
--with-system-zlib --enable-threads=posix --libexecdir=/usr/lib
Modèle de thread: posix
gcc version 5.4.0 (GCC)
~~~