[Bug target/100152] [10.3, 11, 12 Regression] used caller-saved register not preserved across a call.

iains at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Apr 23 00:32:56 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100152

--- Comment #28 from Iain Sandoe <iains at gcc dot gnu.org> ---
reduced test case:
___UTF_8_put(char *a, int b) {
  char *c = a;
  int bytes;
  if (b <= 15)
    bytes = 2;
  else if (b <= 255)
    bytes = 4;
  else if (b <= 4095)
    bytes = 5;
  else
    bytes = 6;
  c = *a = c;
  switch (bytes) {
  case 6:
    *--c = b >>= 6;
  case 5:
    *--c = b;
    b >>= 6;
  }
  *c = bytes + b;
}

___SCMOBJ_to_NONNULLSTRING(d) {
  {
    unsigned long g, h;
    char c;
    h = ((long *)1)[1];
    g = 0;
    for (; g < h; g++)
      i();
    g = 0;
    for (; g < h; g++)
      ___UTF_8_put(c, (long)*((unsigned *)d + (g << 2 >> 2)) << 2 >> 2);
  }
}


More information about the Gcc-bugs mailing list