combo error
[libfirm] / ir / be / test / llvm / PR640.c
1 #include <stdarg.h>
2 #include <stdio.h>
3
4 static int test_stdarg_va(void* p1, ...)
5 {
6     va_list ap;
7     unsigned long l;
8     int i1, i2;
9     void* p2;
10     va_start(ap, p1);
11     i1 = va_arg(ap, int);
12     l = va_arg(ap, unsigned long);
13     i2 = va_arg(ap, int);
14     p2 = va_arg(ap, void *);
15     va_end(ap);
16     return p1 == p2 && i1 == 1 && l == 0x76214365ul && i2 == 2;
17 }
18
19
20 static int test_stdarg_builtin_va(void* p1, ...)
21 {
22     __builtin_va_list ap;
23     unsigned long l;
24     int i1, i2;
25     void* p2;
26     __builtin_stdarg_start(ap, p1);
27     i1 = __builtin_va_arg(ap, int);
28     l = __builtin_va_arg(ap, unsigned long);
29     i2 = __builtin_va_arg(ap, int);
30     p2 = __builtin_va_arg(ap, void *);
31     __builtin_va_end(ap);
32     return p1 == p2 && i1 == 1 && l == 0x76214369ul && i2 == 2;
33 }
34
35
36 static int test_stdarg(int r)
37 {
38     char c1 = 1, c2 = 2;
39     if (test_stdarg_va(&r, c1, 0x76214365ul, c2, &r) != 1)
40         return 0;
41     if (test_stdarg_builtin_va(&r, c1, 0x76214369ul, c2, &r) != 1)
42         return 0;
43     return r & 1;
44 }
45
46
47 int main(int argc, char **argv)
48 {
49     if (test_stdarg(1) != 1) {
50         printf("ERROR\n");
51         return 1;
52     }
53     printf("All done.\n");
54     return 0;
55 }