summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <me@emiliocobos.me>2016-05-17 18:01:46 +0200
committerEmilio Cobos Álvarez <me@emiliocobos.me>2016-05-17 18:01:46 +0200
commitea7d300c57acbc367cdcd14a715ba1c280dac030 (patch)
tree5e36e85e5a3007e90c4622a4eb63a929f0a1df01
parent53c18d3f1f2b967a356a34140223b948abbd406a (diff)
gen: Avoid to generate structs with empty template param names
We generate them incorrectly anyways, but this way at least we're allowed to compile it.
-rw-r--r--src/gen.rs3
-rw-r--r--tests/expectations/opaque_typedef.rs2
-rw-r--r--tests/headers/opaque_typedef.hpp10
3 files changed, 14 insertions, 1 deletions
diff --git a/src/gen.rs b/src/gen.rs
index 1e18557b..9873c24d 100644
--- a/src/gen.rs
+++ b/src/gen.rs
@@ -386,7 +386,8 @@ fn gen_global(mut ctx: &mut GenCtx,
GCompDecl(ci) => {
let c = ci.borrow().clone();
let name = comp_name(&ctx, c.kind, &c.name);
- if !c.args.is_empty() {
+ if !c.args.is_empty() &&
+ !c.args.iter().any(|a| a.name().map(|name| name.is_empty()).unwrap_or(true)) {
defs.extend(comp_to_rs(&mut ctx, &name, c).into_iter());
} else {
defs.push(opaque_to_rs(&mut ctx, &name, c.layout));
diff --git a/tests/expectations/opaque_typedef.rs b/tests/expectations/opaque_typedef.rs
index ebe5bedb..7dfa0ff9 100644
--- a/tests/expectations/opaque_typedef.rs
+++ b/tests/expectations/opaque_typedef.rs
@@ -10,6 +10,8 @@
pub struct Struct_RandomTemplate<T> {
pub _phantom0: ::std::marker::PhantomData<T>,
}
+pub enum Struct_Wat { }
+pub enum Struct_Wat3 { }
#[repr(C)]
pub struct ShouldBeOpaque;
pub type ShouldNotBeOpaque = Struct_RandomTemplate<::std::os::raw::c_int>;
diff --git a/tests/headers/opaque_typedef.hpp b/tests/headers/opaque_typedef.hpp
index a655fbcc..23bb363a 100644
--- a/tests/headers/opaque_typedef.hpp
+++ b/tests/headers/opaque_typedef.hpp
@@ -1,6 +1,16 @@
+// bindgen-flags: -std=c++11
template<typename T>
class RandomTemplate;
+template<int i>
+class Wat;
+
+template<int i>
+class Wat3;
+
+template<>
+class Wat3<3>;
+
/** <div rustbindgen opaque></div> */
typedef RandomTemplate<int> ShouldBeOpaque;