This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/50818] va_list is filled incorrectly in functions with ms_abi attribute on amd64
- From: "vries at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 28 Aug 2016 07:53:50 +0000
- Subject: [Bug target/50818] va_list is filled incorrectly in functions with ms_abi attribute on amd64
- Auto-submitted: auto-generated
- References: <bug-50818-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50818
Tom de Vries <vries at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |vries at gcc dot gnu.org
--- Comment #10 from Tom de Vries <vries at gcc dot gnu.org> ---
(In reply to Steven Shi from comment #9)
> 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
FTR, this was filed as PR77341, which was marked as duplicate of PR70955.