diff options
author | Emilio Cobos Álvarez <me@emiliocobos.me> | 2016-05-17 18:01:46 +0200 |
---|---|---|
committer | Emilio Cobos Álvarez <me@emiliocobos.me> | 2016-05-17 18:01:46 +0200 |
commit | ea7d300c57acbc367cdcd14a715ba1c280dac030 (patch) | |
tree | 5e36e85e5a3007e90c4622a4eb63a929f0a1df01 | |
parent | 53c18d3f1f2b967a356a34140223b948abbd406a (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.rs | 3 | ||||
-rw-r--r-- | tests/expectations/opaque_typedef.rs | 2 | ||||
-rw-r--r-- | tests/headers/opaque_typedef.hpp | 10 |
3 files changed, 14 insertions, 1 deletions
@@ -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; |