-
-
Save lakinwecker/9ef9dbde94c018a33f4c33822c6d93ad to your computer and use it in GitHub Desktop.
GCC bug at -O2 and above for recent GCC and a -O3 and above for older compilers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-> g++ -v -save-temps -O3 test.cpp -I/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/ -o wrong.gccy | |
Using built-in specs. | |
COLLECT_GCC=g++ | |
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/lto-wrapper | |
Target: x86_64-pc-linux-gnu | |
Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,objc,obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror | |
Thread model: posix | |
Supported LTO compression algorithms: zlib zstd | |
gcc version 13.1.1 20230429 (GCC) | |
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'wrong.gccy' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'wrong.gccy-' | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/cc1plus -E -quiet -v -I /home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/ -D_GNU_SOURCE test.cpp -mtune=generic -march=x86-64 -O3 -fpch-preprocess -o wrong.gccy-test.ii | |
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../x86_64-pc-linux-gnu/include" | |
#include "..." search starts here: | |
#include <...> search starts here: | |
/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/ | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../include/c++/13.1.1 | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../include/c++/13.1.1/x86_64-pc-linux-gnu | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../include/c++/13.1.1/backward | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/include | |
/usr/local/include | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/include-fixed | |
/usr/include | |
End of search list. | |
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'wrong.gccy' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'wrong.gccy-' | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/cc1plus -fpreprocessed wrong.gccy-test.ii -quiet -dumpdir wrong.gccy- -dumpbase test.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -O3 -version -o wrong.gccy-test.s | |
GNU C++17 (GCC) version 13.1.1 20230429 (x86_64-pc-linux-gnu) | |
compiled by GNU C version 13.1.1 20230429, GMP version 6.2.1, MPFR version 4.2.0, MPC version 1.3.1, isl version isl-0.26-GMP | |
warning: MPFR header version 4.2.0 differs from library version 4.2.0-p9. | |
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 | |
Compiler executable checksum: e149eaca55f4ee2a0171ba2b54b0dc8d | |
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'wrong.gccy' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'wrong.gccy-' | |
as -v -I /home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/ --64 -o wrong.gccy-test.o wrong.gccy-test.s | |
GNU assembler version 2.40.0 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.40.0 | |
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/ | |
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../:/lib/:/usr/lib/ | |
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'wrong.gccy' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'wrong.gccy.' | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/collect2 -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/lto-wrapper -plugin-opt=-fresolution=wrong.gccy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o wrong.gccy /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../.. wrong.gccy-test.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib/crtn.o | |
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O3' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'wrong.gccy' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'wrong.gccy.' | |
tmp on bg-search-index [!?] | |
-> ./wrong.gcc | |
wut? | |
high: 5.16756e+06 2.06703e+06 3.10054e+06 | |
low: 0 0 0.0220723 | |
diff: 0.132647 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-> g++ -v -save-temps -O1 test.cpp -I/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/ -o right.gcc | |
Using built-in specs. | |
COLLECT_GCC=g++ | |
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/lto-wrapper | |
Target: x86_64-pc-linux-gnu | |
Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,objc,obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror | |
Thread model: posix | |
Supported LTO compression algorithms: zlib zstd | |
gcc version 13.1.1 20230429 (GCC) | |
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O1' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'right.gcc' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'right.gcc-' | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/cc1plus -E -quiet -v -I /home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/ -D_GNU_SOURCE test.cpp -mtune=generic -march=x86-64 -O1 -fpch-preprocess -o right.gcc-test.ii | |
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../x86_64-pc-linux-gnu/include" | |
#include "..." search starts here: | |
#include <...> search starts here: | |
/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/ | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../include/c++/13.1.1 | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../include/c++/13.1.1/x86_64-pc-linux-gnu | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../include/c++/13.1.1/backward | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/include | |
/usr/local/include | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/include-fixed | |
/usr/include | |
End of search list. | |
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O1' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'right.gcc' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'right.gcc-' | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/cc1plus -fpreprocessed right.gcc-test.ii -quiet -dumpdir right.gcc- -dumpbase test.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -O1 -version -o right.gcc-test.s | |
GNU C++17 (GCC) version 13.1.1 20230429 (x86_64-pc-linux-gnu) | |
compiled by GNU C version 13.1.1 20230429, GMP version 6.2.1, MPFR version 4.2.0, MPC version 1.3.1, isl version isl-0.26-GMP | |
warning: MPFR header version 4.2.0 differs from library version 4.2.0-p9. | |
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 | |
Compiler executable checksum: e149eaca55f4ee2a0171ba2b54b0dc8d | |
./rightCOLLECT_GCC_OPTIONS='-v' '-save-temps' '-O1' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'right.gcc' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'right.gcc-' | |
as -v -I /home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/ --64 -o right.gcc-test.o right.gcc-test.s | |
GNU assembler version 2.40.0 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.40.0 | |
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/ | |
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../:/lib/:/usr/lib/ | |
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O1' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'right.gcc' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'right.gcc.' | |
/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/collect2 -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/lto-wrapper -plugin-opt=-fresolution=right.gcc.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o right.gcc /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../.. right.gcc-test.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/../../../../lib/crtn.o | |
.gCOLLECT_GCC_OPTIONS='-v' '-save-temps' '-O1' '-I' '/home/lakin/.conan/data/eigen/3.4.0/_/_/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3/' '-o' 'right.gcc' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'right.gcc.' | |
tmp on bg-search-index [!?] | |
-> ./right.gcc | |
wut? | |
high: 5.16756e+06 2.06703e+06 3.10054e+06 | |
low: -0.12988 -0.0269518 0.0220723 | |
diff: 4.75454e-09 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <Eigen/Core> | |
using f64 = double; | |
using f32 = float; | |
template<typename T> | |
using vec3 = Eigen::Matrix<T, 3, 1>; | |
const f64 RADIUS_EARTH_M = 6371000.0; | |
auto main() -> int { | |
std::cout << "wut?" << std::endl; | |
vec3<f64> pos{0.5, 0.2, 0.3}; | |
pos = pos.normalized() * RADIUS_EARTH_M; | |
// This code is attempting to represent double floating point values | |
// as two float values. At high optimization levels two of the values | |
// of low end up as zero. | |
vec3<f32> high = pos.cast<f32>(); | |
vec3<f32> low = (pos - high.cast<f64>()).cast<f32>(); | |
std::cout << "high: " << high.transpose() << std::endl; | |
std::cout << "low: " << low.transpose() << std::endl; | |
vec3<f64> posRecreated = (high.cast<f64>() + low.cast<f64>()); | |
vec3<f64> diff = posRecreated - pos; | |
std::cout << "diff: " << diff.norm() << std::endl; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment