https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98474
Bug ID: 98474 Summary: incorrect results using __uint128_t Product: gcc Version: 10.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jeffhurchalla at gmail dot com Target Milestone: --- g++ version: g++-10 (Ubuntu 10.1.0-2ubuntu1~18.04) 10.1.0 x64 CPU: Intel(R) Core(TM) i5-4570S CPU @ 2.90GH Compile command used: g++-10 -O3 -std="gnu++11" -v -save-temps -fsanitize=undefined -Wall -Wextra -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations test.cpp -o testbug It compiles cleanly for me, with no warnings or errors. After compiling, I use the following commands: ./testbug echo $? Echo prints 2 for me, but the result should be 0. The preprocessed version of test.cpp is the same as the non-preprocessed version. It follows here: __attribute__ ((noinline)) __uint128_t foo(__uint128_t& x) { return x; } int main() { using T = __uint128_t; T two65 = static_cast<T>(1) << 65; T two65_copy = two65; foo(two65_copy); T n = two65_copy; while (n >= two65) n -= two65; return static_cast<int>(n >> 64); }