| /* { dg-options "-std=gnu99" } */ |
| |
| #include <stdarg.h> |
| |
| extern void abort (void); |
| |
| struct S1 |
| { |
| _Decimal64 a[0]; |
| }; |
| |
| struct S2 |
| { |
| struct |
| { |
| _Decimal64 e; |
| } b[0]; |
| }; |
| |
| struct S3 |
| { |
| union |
| { |
| _Decimal64 c; |
| } a[0]; |
| }; |
| |
| struct S4 |
| { |
| int a[0]; |
| _Decimal64 b[0]; |
| }; |
| |
| struct S5 |
| { |
| union |
| { |
| _Decimal64 c[0]; |
| } a; |
| }; |
| |
| static int failcnt = 0; |
| |
| /* Support compiling the test to report individual failures; default is |
| to abort as soon as a check fails. */ |
| #ifdef DBG |
| #include <stdio.h> |
| #define FAILURE do \ |
| { printf ("failed at line %d\n", __LINE__); \ |
| failcnt++; \ |
| }while(0) |
| #else |
| #define FAILURE abort () |
| #endif |
| |
| int check_var (int z, ...) |
| { |
| long long result; |
| va_list ap; |
| va_start (ap, z); |
| va_arg (ap, struct S1); |
| result = va_arg (ap, long long); |
| va_end (ap); |
| |
| return (result == 2LL); |
| } |
| |
| int main () |
| { |
| struct S1 s1; |
| struct S2 s2; |
| struct S3 s3; |
| struct S4 s4; |
| struct S5 s5; |
| |
| if (check_var (2, s1, 2LL) == 0) |
| FAILURE; |
| if (check_var (2, s2, 2LL) == 0) |
| FAILURE; |
| if (check_var (2, s3, 2LL) == 0) |
| FAILURE; |
| if (check_var (2, s4, 2LL) == 0) |
| FAILURE; |
| if (check_var (2, s5, 2LL) == 0) |
| FAILURE; |
| |
| if (failcnt) |
| abort (); |
| |
| return 0; |
| } |