diff options
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c')
-rwxr-xr-x | gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c b/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c new file mode 100755 index 0000000..f76bb36 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c @@ -0,0 +1,56 @@ +#ifdef NO_VARARGS +#include <stdarg.h> +#define va_alist int x_attr, ... +#define va_dcl +#else +#include <varargs.h> +#endif + +struct s { int x, y; }; + +f (va_alist) + va_dcl +{ + struct s va_values; + va_list va; + int attr; + int i; + +#ifdef NO_VARARGS + va_start (va, x_attr); + attr = x_attr; +#else + va_start (va); + attr = va_arg (va, int); +#endif + + if (attr != 2) + abort (); + + va_values = va_arg (va, struct s); + if (va_values.x != 0xaaaa || va_values.y != 0x5555) + abort (); + + attr = va_arg (va, int); + if (attr != 3) + abort (); + + va_values = va_arg (va, struct s); + if (va_values.x != 0xffff || va_values.y != 0x1111) + abort (); + + va_end (va); +} + +main () +{ + struct s a, b; + + a.x = 0xaaaa; + a.y = 0x5555; + b.x = 0xffff; + b.y = 0x1111; + + f (2, a, 3, b); + exit (0); +} |