summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXidorn Quan <me@upsuper.org>2016-12-28 11:58:29 +1100
committerXidorn Quan <me@upsuper.org>2016-12-28 12:01:53 +1100
commit912abe5b584960e9c15a3cd050f965ab69bf5f7e (patch)
treee76647498967883c068199869754eb82ebdb7ed6
parent3ba3a76f8c7f393c81bc14eb497ae2b3047ead98 (diff)
ir: Skip function template earlier.
This should fix #364.
-rw-r--r--libbindgen/Cargo.toml2
-rw-r--r--libbindgen/src/ir/function.rs5
-rw-r--r--libbindgen/tests/expectations/tests/template_function_with_auto.rs10
-rw-r--r--libbindgen/tests/headers/template_function_with_auto.hpp9
4 files changed, 25 insertions, 1 deletions
diff --git a/libbindgen/Cargo.toml b/libbindgen/Cargo.toml
index e6e9a5db..dfaba98b 100644
--- a/libbindgen/Cargo.toml
+++ b/libbindgen/Cargo.toml
@@ -12,7 +12,7 @@ license = "BSD-3-Clause"
name = "libbindgen"
readme = "README.md"
repository = "https://github.com/servo/rust-bindgen"
-version = "0.1.4"
+version = "0.1.5"
workspace = ".."
[dev-dependencies]
diff --git a/libbindgen/src/ir/function.rs b/libbindgen/src/ir/function.rs
index 7aed3d7e..88ab861d 100644
--- a/libbindgen/src/ir/function.rs
+++ b/libbindgen/src/ir/function.rs
@@ -134,6 +134,11 @@ impl FunctionSig {
use clang_sys::*;
debug!("FunctionSig::from_ty {:?} {:?}", ty, cursor);
+ // Skip function templates
+ if cursor.kind() == CXCursor_FunctionTemplate {
+ return Err(ParseError::Continue);
+ }
+
// Don't parse operatorxx functions in C++
let spelling = cursor.spelling();
if spelling.starts_with("operator") {
diff --git a/libbindgen/tests/expectations/tests/template_function_with_auto.rs b/libbindgen/tests/expectations/tests/template_function_with_auto.rs
new file mode 100644
index 00000000..b86d8224
--- /dev/null
+++ b/libbindgen/tests/expectations/tests/template_function_with_auto.rs
@@ -0,0 +1,10 @@
+/* automatically generated by rust-bindgen */
+
+
+#![allow(non_snake_case)]
+
+
+extern "C" {
+ #[link_name = "_Z5Test2v"]
+ pub fn Test2() -> ::std::os::raw::c_uint;
+}
diff --git a/libbindgen/tests/headers/template_function_with_auto.hpp b/libbindgen/tests/headers/template_function_with_auto.hpp
new file mode 100644
index 00000000..3bd4a64f
--- /dev/null
+++ b/libbindgen/tests/headers/template_function_with_auto.hpp
@@ -0,0 +1,9 @@
+// bindgen-flags: -- -std=c++14
+
+template<typename T> auto Test1() {
+ return T(1);
+}
+
+auto Test2() {
+ return Test1<unsigned int>();
+}