diff options
author | YamaArashi <shadow962@live.com> | 2016-01-06 01:47:28 -0800 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-01-06 01:47:28 -0800 |
commit | be8b04496302184c6e8f04d6179f9c3afc50aeb6 (patch) | |
tree | 726e2468c0c07add773c0dbd86ab6386844259ae /gcc/testsuite/gcc.c-torture/execute/va-arg-3.c |
initial commit
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/va-arg-3.c')
-rwxr-xr-x | gcc/testsuite/gcc.c-torture/execute/va-arg-3.c | 339 |
1 files changed, 339 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c new file mode 100755 index 0000000..7b0a0b0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c @@ -0,0 +1,339 @@ +/* Same as va-arg-2.c but using varargs.h. */ +/* The purpose of this test is to catch edge cases when arguments are passed + in regs and on the stack. We test 16 cases, trying to catch multiple + targets (some use 3 regs for argument passing, some use 12, etc.). + We test both the arguments and the `lastarg' (the argument to va_start). */ + +#ifdef NO_VARARGS +int main() +{ + exit (0); +} + +#else +#include <varargs.h> + +extern __SIZE_TYPE__ strlen (); + +int +to_hex (unsigned int a) +{ + static char hex[] = "0123456789abcdef"; + + if (a > 15) + abort (); + return hex[a]; +} + +void +f0 (va_alist) + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 0) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f1 (a1, va_alist) + int a1; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 1) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f2 (a1, a2, va_alist) + int a1, a2; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 2) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f3 (a1, a2, a3, va_alist) + int a1, a2, a3; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 3) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f4 (a1, a2, a3, a4, va_alist) + int a1, a2, a3, a4; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 4) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f5 (a1, a2, a3, a4, a5, va_alist) + int a1, a2, a3, a4, a5; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 5) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f6 (a1, a2, a3, a4, a5, a6, va_alist) + int a1, a2, a3, a4, a5, a6; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 6) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f7 (a1, a2, a3, a4, a5, a6, a7, va_alist) + int a1, a2, a3, a4, a5, a6, a7; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 7) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f8 (a1, a2, a3, a4, a5, a6, a7, a8, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 8) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f9 (a1, a2, a3, a4, a5, a6, a7, a8, a9, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 9) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f10 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 10) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f11 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, + va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 11) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f12 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 12) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f13 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 13) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f14 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 14) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f15 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 15) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +main () +{ + char *f = "0123456789abcdef"; + + f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15); + f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15); + f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15); + f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15); + f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15); + f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15); + f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15); + f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15); + + exit (0); +} +#endif /* ! NO_VARARGS */ |