diff options
6 files changed, 64 insertions, 0 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index f596ddda..15b0a139 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -3338,6 +3338,10 @@ impl CodeGenerator for Function { warn!("Skipping function with thiscall ABI that isn't supported by the configured Rust target"); return; } + Abi::Win64 if signature.is_variadic() => { + warn!("Skipping variadic function with Win64 ABI that isn't supported"); + return; + } Abi::Unknown(unknown_abi) => { panic!( "Invalid or unknown abi {:?} for function {:?} ({:?})", diff --git a/tests/expectations/tests/libclang-3.8/abi_variadic_function.rs b/tests/expectations/tests/libclang-3.8/abi_variadic_function.rs new file mode 100644 index 00000000..ef1769dd --- /dev/null +++ b/tests/expectations/tests/libclang-3.8/abi_variadic_function.rs @@ -0,0 +1,17 @@ +/* automatically generated by rust-bindgen */ + +#![allow( + dead_code, + non_snake_case, + non_camel_case_types, + non_upper_case_globals +)] + +extern "C" { + #[link_name = "\u{1}_Z1acz"] + pub fn a(arg1: ::std::os::raw::c_char, ...) -> ::std::os::raw::c_char; +} +extern "C" { + #[link_name = "\u{1}_Z1bcz"] + pub fn b(arg1: ::std::os::raw::c_char, ...) -> ::std::os::raw::c_char; +} diff --git a/tests/expectations/tests/libclang-3.9/abi_variadic_function.rs b/tests/expectations/tests/libclang-3.9/abi_variadic_function.rs new file mode 100644 index 00000000..89cf9a64 --- /dev/null +++ b/tests/expectations/tests/libclang-3.9/abi_variadic_function.rs @@ -0,0 +1,13 @@ +/* automatically generated by rust-bindgen */ + +#![allow( + dead_code, + non_snake_case, + non_camel_case_types, + non_upper_case_globals +)] + +extern "C" { + #[link_name = "\u{1}_Z1bcz"] + pub fn b(arg1: ::std::os::raw::c_char, ...) -> ::std::os::raw::c_char; +} diff --git a/tests/expectations/tests/libclang-4/abi_variadic_function.rs b/tests/expectations/tests/libclang-4/abi_variadic_function.rs new file mode 100644 index 00000000..89cf9a64 --- /dev/null +++ b/tests/expectations/tests/libclang-4/abi_variadic_function.rs @@ -0,0 +1,13 @@ +/* automatically generated by rust-bindgen */ + +#![allow( + dead_code, + non_snake_case, + non_camel_case_types, + non_upper_case_globals +)] + +extern "C" { + #[link_name = "\u{1}_Z1bcz"] + pub fn b(arg1: ::std::os::raw::c_char, ...) -> ::std::os::raw::c_char; +} diff --git a/tests/expectations/tests/libclang-5/abi_variadic_function.rs b/tests/expectations/tests/libclang-5/abi_variadic_function.rs new file mode 100644 index 00000000..89cf9a64 --- /dev/null +++ b/tests/expectations/tests/libclang-5/abi_variadic_function.rs @@ -0,0 +1,13 @@ +/* automatically generated by rust-bindgen */ + +#![allow( + dead_code, + non_snake_case, + non_camel_case_types, + non_upper_case_globals +)] + +extern "C" { + #[link_name = "\u{1}_Z1bcz"] + pub fn b(arg1: ::std::os::raw::c_char, ...) -> ::std::os::raw::c_char; +} diff --git a/tests/headers/abi_variadic_function.hpp b/tests/headers/abi_variadic_function.hpp new file mode 100644 index 00000000..2141535c --- /dev/null +++ b/tests/headers/abi_variadic_function.hpp @@ -0,0 +1,4 @@ +// bindgen-flags: -- -std=c++11 + +char __attribute__((ms_abi)) a(char, ...); +char b(char, ...); |