https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94103
--- Comment #1 from Alexander Cherepanov <ch3root at openwall dot com> --- Example with decimal floating-point: ---------------------------------------------------------------------- #include <string.h> #include <stdio.h> int main() { _Decimal32 x = 9999999; // maximum significand unsigned u; memcpy(&u, &x, sizeof u); printf("%#08x\n", u); ++*(unsigned char *)&x; // create non-canonical representation of 0 (void)-x; memcpy(&u, &x, sizeof u); printf("%#08x\n", u); } ---------------------------------------------------------------------- $ gcc -std=c2x -pedantic -Wall -Wextra test.c && ./a.out 0x6cb8967f 0x6cb89680 $ gcc -std=c2x -pedantic -Wall -Wextra -O3 test.c && ./a.out 0x6cb8967f 0x32800000 ---------------------------------------------------------------------- gcc x86-64 version: gcc (GCC) 10.0.1 20200305 (experimental) ---------------------------------------------------------------------- Unoptimized results are right, optimized -- wrong.