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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |8.0

--- Comment #53 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This is a pure C++ testcase that gives the wrong answer in GCC 7, presumably
because libc's vsnprintf is expecting the C calling convention.

struct foo { };

char buf[128];

int MySnprintf(struct foo, const char *pFormat, ...)
{
  __builtin_va_list arguments;
  __builtin_va_start(arguments, pFormat);
  __builtin_vsnprintf(buf, sizeof(buf), pFormat, arguments);
  __builtin_va_end(arguments);

  return 0;
}

int main(void) {
  struct foo blah;
  MySnprintf(blah, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", 1, 2, 3, 4, 5, 6, 7, 8, 9,
10);

  __builtin_puts(buf);
}

GCC 7 prints:
1:2:3:4:5:4195847:6:7:8:9

GCC 8.1.0 prints:
1:2:3:4:5:6:7:8:9:10

Reply via email to