Interaction between wrapped statics and redefined function · Issue #2420 · rust-lang/rust-bindgen (original) (raw)

Input C/C++ Header

static inline int foo(int a, int b) { return a + b; }

#define foo(a) foo(a, a + 5)

Bindgen Invocation

$ bindgen --experimental --wrap-static-fns input.h

Actual Results

extern "C" { #[link_name = "\u{1}foo__extern"] pub fn foo(a: ::std::os::raw::c_int, b: ::std::os::raw::c_int) -> ::std::os::raw::c_int; }

and

int foo__extern(int a, int b) asm("foo__extern"); int foo__extern(int a, int b) { return foo(a, b); }

and compiling the C wrapper:

$ cc -include input.h /tmp/bindgen/extern.c
/tmp/bindgen/extern.c: In function 'foo__extern':
/tmp/bindgen/extern.c:2:48: error: macro "foo" passed 2 arguments, but takes just 1
    2 | int foo__extern(int a, int b) { return foo(a, b); }
      |                                                ^
In file included from <command-line>:
./input.h:5: note: macro "foo" defined here
    5 | #define foo(a) foo(a, a + 5)

Expected Results

I don't really know. Is this something that should work? If yes, how ?

cc @pvdrz