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

--- Comment #9 from Steven Shi <steven.shi at intel dot com> ---
GCC6.10 lto fails to support below MS ABI buildin of va list, but GCC5 works.
This is a regression bug for GCC6. I suspect current GCC trunk also has this
regression bug.
  __builtin_ms_va_list ap;
  __builtin_ms_va_start (ap, n);
  __builtin_ms_va_end (ap);

Below is my testcase:
$cat test2.c

#include <stdio.h>

int
__attribute__((ms_abi))
foo (int n, ...)
{
  __builtin_ms_va_list ap;
  int sum = 0;

  __builtin_ms_va_start (ap, n);

  while (n--) {
    sum += __builtin_va_arg (ap, int);
    printf("sum = %d\n", sum);
  }
  __builtin_ms_va_end (ap);

  return sum;
}

int main ()
{
  int res = foo (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

  if (res != 55)
    __builtin_abort ();

  return 0;
}
$ gcc --version
gcc (GCC) 6.1.0

$ gcc -flto -Os test2.c
$ ./a.out
Segmentation fault (core dumped)

$ gcc-5 -flto -Os test2.c
$ ./a.out
sum = 1
sum = 3
sum = 6
sum = 10
sum = 15
sum = 21
sum = 28
sum = 36
sum = 45
sum = 55

Reply via email to