Unnamed types have a name when switching to llvm >= 16.0.0 · Issue #2488 · rust-lang/rust-bindgen (original) (raw)

Sorry for not using the issue template, I have no minimal reproducible example right now.

Hi. We at extendr/libR-sys use bindgen to generate bindings for a set of headers provided by the R programming language. We have a complicated setup which creates bindings for all three mainstream OSes. On Windows, we rely on the MSYS2 and its version of LLVM.

Recently our CI for Windows started failing with the following errors:

The builder configuration is (approximately) the following:

let mut bindgen_builder = bindgen::Builder::default() .allowlist_function(&allowlist_pattern) .allowlist_var(&allowlist_pattern) .allowlist_type(&allowlist_pattern) .header("wrapper.h") .parse_callbacks(Box::new(bindgen::CargoCallbacks)) .clang_args(&[ format!("-I{}", r_paths.include.display()), format!("--target={}", target), ])
.blocklist_item("max_align_t") .blocklist_item("__mingw_ldbl_type_t") .generate_comments(true) .parse_callbacks(Box::new(RCallbacks)) .clang_arg("-fparse-all-comments");

While it might be messy, you can see that we have some patterns specified for allow lists, and we have identical allow lists on all three OSes, and the allow list has not been recently changed.

I was able to locally reproduce this error if I install llvm 16.0.0 or higher (this time I am talking about native Windows version), but if I roll back to llvm 15.0.7, it works as before. This, to me, suggests that there is some (breaking?) change in, perhaps, CLI API or elsewhere that affects us.

I tried to scout clang-sys and this repo, but found no relevant issues. I am aware that this could be a problem in clang-sys, but I have a very limited understanding of llvm infrastructure, so I decided to start my investigation from here.