https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114396
--- Comment #17 from Hongtao Liu <liuhongt at gcc dot gnu.org> --- > > > > The to_mpz args look like they could be mixing signs as well: > > I tries below, looks like mixing signs works well. debug show step_expr is -5 and signed. short a = 0xF; short b[16]; unsigned short ua = 0xF; unsigned short ub[16]; int main() { for (int e = 0; e < 9; e += 1) b[e] = a *= 0x5; __builtin_printf("decimal: %d\n", a); __builtin_printf("hex: %X\n", a); for (int e = 0; e < 9; e += 1) b[e] = a *= -5; __builtin_printf("decimal: %d\n", a); __builtin_printf("hex: %X\n", a); for (int e = 0; e < 9; e += 1) ub[e] = ua *= 0x5; __builtin_printf("decimal: %d\n", ua); __builtin_printf("hex: %X\n", ua); for (int e = 0; e < 9; e += 1) ub[e] = ua *= -5; __builtin_printf("decimal: %d\n", ua); __builtin_printf("hex: %X\n", ua); }