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)

~~~

Reply via email to