/* { dg-options "-std=gnu99" } */ #include 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 #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; }