[Bug c/77341] New: GCC6 va_list MS ABI buildin regression bug
steven.shi at intel dot com
gcc-bugzilla@gcc.gnu.org
Tue Aug 23 07:59:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77341
Bug ID: 77341
Summary: GCC6 va_list MS ABI buildin regression bug
Product: gcc
Version: 6.1.0
Status: UNCONFIRMED
Severity: critical
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: steven.shi at intel dot com
Target Milestone: ---
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
BTW, I've raised this issue in below bug comments:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50818
More information about the Gcc-bugs
mailing list