• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // bindgen-flags: --experimental --wrap-static-fns
2 // bindgen-parse-callbacks: wrap-as-variadic-fn
3 
4 // to avoid polluting the expectation tests we put the stdarg.h behind a conditional
5 // variable only used in bindgen-integration
6 #ifdef USE_VA_HEADER
7 #include <stdarg.h>
8 #endif
9 
foo()10 static inline int foo() {
11     return 11;
12 }
13 static int bar();
bar()14 static int bar() {
15     return 1;
16 }
baz()17 inline int baz() {
18     return 2;
19 }
20 
takes_ptr(int * arg)21 static inline int takes_ptr(int* arg) {
22     return *arg + 1;
23 }
24 
takes_fn_ptr(int (* f)(int))25 static inline int takes_fn_ptr(int (*f)(int)) {
26     return f(1);
27 }
28 
takes_fn(int (f)(int))29 static inline int takes_fn(int (f)(int)) {
30     return f(2);
31 }
32 
33 typedef int (func)(int);
34 
takes_alias(func f)35 static inline int takes_alias(func f) {
36     return f(3);
37 }
38 
takes_qualified(const int * const * arg)39 static inline int takes_qualified(const int *const *arg) {
40     return **arg;
41 }
42 
43 enum foo {
44     BAR = 0x0,
45 };
46 
takes_enum(const enum foo f)47 static inline enum foo takes_enum(const enum foo f) {
48     return f;
49 }
50 
nevermore()51 static inline void nevermore() {
52     while (1) { }
53 }
54 
takes_fn_with_no_args(int (f)(void))55 static inline int takes_fn_with_no_args(int(f)(void)) {
56     return f();
57 }
58 
variadic(int x,...)59 static inline int variadic(int x, ...) {
60     return x;
61 }
62 
no_extra_argument(__builtin_va_list va)63 static inline void no_extra_argument(__builtin_va_list va) {}
64 
many_va_list(int i,__builtin_va_list va1,__builtin_va_list va2)65 static inline int many_va_list(int i, __builtin_va_list va1, __builtin_va_list va2) {
66     return i;
67 }
68 
69 #ifndef USE_VA_HEADER
wrap_as_variadic_fn1(int i,__builtin_va_list va)70 static inline int wrap_as_variadic_fn1(int i, __builtin_va_list va) {
71     return i;
72 }
73 
wrap_as_variadic_fn2(int i,__builtin_va_list va)74 static inline void wrap_as_variadic_fn2(int i, __builtin_va_list va) {}
75 #else
wrap_as_variadic_fn1(int i,va_list va)76 static inline int wrap_as_variadic_fn1(int i, va_list va) {
77     int res = 0;
78 
79     for (int j = 0; j < i; j++)
80         res += (int) va_arg(va, int);
81 
82     return res;
83 }
84 
wrap_as_variadic_fn2(int i,va_list va)85 static inline void wrap_as_variadic_fn2(int i, va_list va) {}
86 #endif
87