https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70826
--- Comment #4 from Bill Seurer <seurer at linux dot vnet.ibm.com> --- From poking around in gdb it is dying on line 1078 in the code from the VERIFY_CR macro (part of VERIFY_REGS) though "where" shows line 1070 for some reason. #ifndef __NO_FPRS__ b_all (); VERIFY_REGS; b_cvfr (); VERIFY_REGS; b_vfr (); VERIFY_REGS; b_cvf (); VERIFY_REGS; b_vf (); VERIFY_REGS; // line 1078, dies here #endif #define VERIFY_CR ({ int tmp; __asm__ __volatile__ ("mfcr %0" : "=r" (tmp)); if ((tmp & ((15 << 20) | (15 << 16) | (15 << 12))) != ((6 << 20) | (7 << 16) | (8 << 12))) abort (); }) (gdb) print /x tmp $2 = 0x22278082 (gdb) print /x $cr $4 = 0x22278082 After the bit manipulation the value in the CR comes out as 0x00278000 but it is being compared to 0x00678000 and thus the abort.