https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122328
Bug ID: 122328
Summary: unexpected result from fmaf on windows
Product: gcc
Version: 15.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: rainer.bitschi at aon dot at
Target Milestone: ---
#include <iostream>
#include <cmath>
int main() {
float c = 228.0f;
float d = 0.980066597462f;
float e = 37.348770141602;
float result = std::fmaf(c, d, e);
std::printf("%16.12f\n", result);
}
-----------------------------------
compiling this code very simply as "g++ test.cpp" on linux/wsl will give me the
result of
260.803955078125
comparing to other compilers on godbolt this should be correct
On Windows I tested several builds from http://winlibs.com, mostly the
currently latest version 15.2.0, there I get the answer of
260.803924560547
BUT: Compiling on windows with option -O1 will give me the "correct" result
again
BUT BUT: Reading through optimization flags at
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html I dont know what to
make of it. Listing all the individual settings that make up the -O1 flag as
described there will get me the wrong result again.
I just expected the same result on linux and windows with default -O0 setting?
PS C:\temp> g++ test.cpp -o test.exe -v
Using built-in specs.
COLLECT_GCC=C:\Daten\gcc-15.2.0-msvcrt\mingw64\bin\g++.exe
COLLECT_LTO_WRAPPER=C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/15.2.0/lto-wrapper.exe
OFFLOAD_TARGET_NAMES=nvptx-none
Target: x86_64-w64-mingw32
Configured with: ../configure
--prefix=/R/winlibs_staging_msvcrt64/inst_gcc-15.2.0/share/gcc
--build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32
--enable-offload-targets=nvptx-none --with-pkgversion='MinGW-W64
x86_64-msvcrt-posix-seh, built by Brecht Sanders, r1' --with-tune=generic
--enable-checking=release --enable-threads=posix --disable-sjlj-exceptions
--disable-libunwind-exceptions --disable-serial-configure --disable-bootstrap
--enable-host-shared --enable-plugin --disable-default-ssp --disable-rpath
--disable-libstdcxx-debug --disable-version-specific-runtime-libs
--disable-symvers --enable-languages=c,c++,fortran,lto,objc,obj-c++
--disable-gold --disable-nls --disable-stage1-checking --disable-win32-registry
--disable-multilib --enable-ld --enable-libquadmath --enable-libada
--enable-libssp --enable-libstdcxx --enable-lto --enable-fully-dynamic-string
--enable-libgomp --enable-graphite --enable-mingw-wildcard
--enable-libstdcxx-time --enable-libstdcxx-pch
--with-mpc=/c/Prog/winlibs_staging_msvcrt/custombuilt64
--with-mpfr=/c/Prog/winlibs_staging_msvcrt/custombuilt64
--with-gmp=/c/Prog/winlibs_staging_msvcrt/custombuilt64
--with-isl=/c/Prog/winlibs_staging_msvcrt/custombuilt64
--disable-libstdcxx-backtrace --enable-install-libiberty --enable-__cxa_atexit
--without-included-gettext --with-diagnostics-color=auto
--enable-clocale=generic --enable-libgdiagnostics --with-libiconv
--with-system-zlib
--with-build-sysroot=/R/winlibs_staging_msvcrt64/gcc-15.2.0/build_mingw/mingw-w64
CFLAGS='-I/c/Prog/winlibs_staging_msvcrt/custombuilt64/include/libdl-win32
-march=nocona -msahf -mtune=generic -O2 -Wno-error=format'
CXXFLAGS='-Wno-int-conversion -march=nocona -msahf -mtune=generic -O2'
LDFLAGS='-pthread -Wl,--no-insert-timestamp -Wl,--dynamicbase
-Wl,--high-entropy-va -Wl,--nxcompat -Wl,--tsaware'
LD=/c/Prog/winlibs_staging_msvcrt/custombuilt64/share/binutils/bin/ld.exe
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 15.2.0 (MinGW-W64 x86_64-msvcrt-posix-seh, built by Brecht Sanders,
r1)
COLLECT_GCC_OPTIONS='-o' 'test.exe' '-v' '-foffload-options=-l_GCC_stdc++'
'-shared-libgcc' '-mtune=generic' '-march=x86-64'
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/15.2.0/cc1plus.exe
-quiet -v -iprefix
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/
-D_REENTRANT test.cpp -quiet -dumpbase test.cpp -dumpbase-ext .cpp
-mtune=generic -march=x86-64 -version -foffload-options=-l_GCC_stdc++ -o
C:\Users\raine\AppData\Local\Temp\cc8Xisau.s
GNU C++17 (MinGW-W64
x86_64-msvcrt-posix-seh, built by Brecht Sanders, r1) version 15.2.0
(x86_64-w64-mingw32)
compiled by GNU C version 15.2.0, GMP version 6.3.0, MPFR version
4.2.2, MPC version 1.3.1, isl version isl-0.27-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring duplicate directory
"C:/Daten/gcc-15.2.0-msvcrt/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../include/c++/15.2.0"
ignoring duplicate directory
"C:/Daten/gcc-15.2.0-msvcrt/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../include/c++/15.2.0/x86_64-w64-mingw32"
ignoring duplicate directory
"C:/Daten/gcc-15.2.0-msvcrt/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../include/c++/15.2.0/backward"
ignoring duplicate directory
"C:/Daten/gcc-15.2.0-msvcrt/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/15.2.0/include"
ignoring nonexistent directory
"R:/winlibs_staging_msvcrt64/inst_gcc-15.2.0/share/gcc/include"
ignoring nonexistent directory
"/R/winlibs_staging_msvcrt64/inst_gcc-15.2.0/share/gcc/include"
ignoring duplicate directory
"C:/Daten/gcc-15.2.0-msvcrt/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/15.2.0/include-fixed"
ignoring duplicate directory
"C:/Daten/gcc-15.2.0-msvcrt/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/include"
ignoring nonexistent directory "/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../include/c++/15.2.0
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../include/c++/15.2.0/x86_64-w64-mingw32
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../include/c++/15.2.0/backward
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/include
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../include
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/include-fixed
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/include
End of search list.
Compiler executable checksum: 43a2d58255b90554ada10a53fa1a7228
COLLECT_GCC_OPTIONS='-o' 'test.exe' '-v' '-foffload-options=-l_GCC_stdc++'
'-shared-libgcc' '-mtune=generic' '-march=x86-64'
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/bin/as.exe
-v -o C:\Users\raine\AppData\Local\Temp\cccTpcgd.o
C:\Users\raine\AppData\Local\Temp\cc8Xisau.s
GNU assembler version 2.45 (x86_64-w64-mingw32) using BFD version (Binutils for
MinGW-W64 x86_64, built by Brecht Sanders, r1) 2.45
COMPILER_PATH=C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/15.2.0/;C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../libexec/gcc/;C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/bin/
LIBRARY_PATH=C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/;C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/;C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../lib/;C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/lib/;C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../
COLLECT_GCC_OPTIONS='-o' 'test.exe' '-v' '-foffload-options=-l_GCC_stdc++'
'-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'test.'
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/15.2.0/collect2.exe
-plugin
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/15.2.0/liblto_plugin.dll
-plugin-opt=C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/15.2.0/lto-wrapper.exe
-plugin-opt=-fresolution=C:\Users\raine\AppData\Local\Temp\cc2as0U0.res
-plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s
-plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmingwex
-plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32
-plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32
-plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32
-plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32
-plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc
-plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt
-plugin-opt=-pass-through=-lkernel32 -m i386pep -Bdynamic -o test.exe
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/crtbegin.o
-LC:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0
-LC:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc
-LC:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/lib/../lib
-LC:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../lib
-LC:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/lib
-LC:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../..
C:\Users\raine\AppData\Local\Temp\cccTpcgd.o -lstdc++ -lmingw32 -lgcc_s -lgcc
-lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32
-lkernel32 -lmingw32 -lgcc_s -lgcc -lmingwex -lmsvcrt -lkernel32
C:/Daten/gcc-15.2.0-msvcrt/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/crtend.o
COLLECT_GCC_OPTIONS='-o' 'test.exe' '-v' '-foffload-options=-l_GCC_stdc++'
'-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'test.'
PS C:\temp> .\test.exe
260.803924560547
PS C:\temp>