vasprintf (char * * ret, const char * fmt, struct va_list ap)
{
  int D.5665;
  int D.5667;
  char * buf;
  int len;
  size_t buflen;
  struct va_list ap2;

  try
    {
      __builtin_va_copy (&ap2, ap);
      len = vsnprintf (0B, 0, fmt, ap2);
      if (len >= 0) goto <D.5664>; else goto <D.5662>;
      <D.5664>:
      D.5665 = len + 1;
      buflen = (size_t) D.5665;
      buf = malloc (buflen);
      if (buf != 0B) goto <D.5666>; else goto <D.5662>;
      <D.5666>:
      len = vsnprintf (buf, buflen, fmt, ap);
      *ret = buf;
      goto <D.5663>;
      <D.5662>:
      *ret = 0B;
      len = -1;
      <D.5663>:
      __builtin_va_end (&ap2);
      D.5667 = len;
      return D.5667;
    }
  finally
    {
      ap2 = {CLOBBER};
    }
}


vsnprintf (char * restrict __s, size_t __n, const char * restrict __fmt, struct __gnuc_va_list __ap)
{
  int D.5670;
  unsigned int D.5671;

  D.5671 = __builtin_object_size (__s, 1);
  D.5670 = __builtin___vsnprintf_chk (__s, __n, 1, D.5671, __fmt, __ap);
  return D.5670;
}


