https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114464
--- Comment #3 from Sam James <sjames at gcc dot gnu.org> --- Reduced: ``` template <int N> void double_to_int(double, unsigned char *scratch, bool carry) { for (int i = 0; i < N; i++) { bool b = scratch[i] <<= 1; if (carry) scratch[i] |= 1; carry = b; } } double bcp_row_data_d; unsigned char bcp_row_data_ptr; bool carry; void bcp_row_data() { double_to_int<16>(bcp_row_data_d, &bcp_row_data_ptr, carry); } ```