summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/codegen/mod.rs4
-rw-r--r--tests/expectations/tests/libclang-3.8/abi_variadic_function.rs17
-rw-r--r--tests/expectations/tests/libclang-3.9/abi_variadic_function.rs13
-rw-r--r--tests/expectations/tests/libclang-4/abi_variadic_function.rs13
-rw-r--r--tests/expectations/tests/libclang-5/abi_variadic_function.rs13
-rw-r--r--tests/headers/abi_variadic_function.hpp4
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, ...);