Fails to generate correct code when `UINT64_C` is used
I understand that getting the correct integer type from #define is very difficult, however using UINT64_C should clarify to bindgen that it's a 64-bit integer. Currently the macro parser fails on UINT64_C and the Clang macro fallback is needed, but that still generates a 32-bit integer.
Header:
#include <stdint.h>
#define SOMETHING UINT64_C(1)
Without --clang-macro-fallback:
bindgen --allowlist-item SOMETHING header.h
Output:
/* automatically generated by rust-bindgen 0.71.1 */
With --clang-macro-fallback:
bindgen --clang-macro-fallback --allowlist-item SOMETHING header.h
Output:
/* automatically generated by rust-bindgen 0.71.1 */
pub const SOMETHING: u32 = 1;
If this is not possible to do, you can just close this issue. But it feels like something that bindgen could do.
Cc: @jbaublitz
Hi @Kriskras99, this has to do with the type of integers reported by Clang when evaluating macro bodies. It does not report a size so it ends up defaulting to a 32-bit width integer. Now theoretically we could make all of these integers 64-bit, but until Clang reports the correct size in this context, we can't really take a more fine-grained approach. We rely on Clang to report that information elsewhere in bindgen.
Thanks for the detailed explanation!