summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
authorSergey Pepyakin <s.pepyakin@gmail.com>2017-10-09 20:33:52 +0300
committerSergey Pepyakin <s.pepyakin@gmail.com>2017-10-09 21:06:55 +0300
commitc187b9f36001bebf756f9ed4748deeb01759c61b (patch)
treee2b68f70e0ee6bed6bb7c6ecf40debf1ca1bc927 /src/codegen/mod.rs
parentbfd5030efc39a6b9fb392b4e68d2599d2e348ae5 (diff)
Fix bitfields in bindgen unions
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r--src/codegen/mod.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index ea9fec41..94a62b97 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -1152,7 +1152,21 @@ impl<'a> FieldCodegen<'a> for BitfieldUnit {
F: Extend<quote::Tokens>,
M: Extend<quote::Tokens>,
{
- let field_ty = helpers::blob(self.layout());
+ let field_ty = if parent.is_union() && !parent.can_be_rust_union(ctx) {
+ let ty = helpers::blob(self.layout());
+ if ctx.options().enable_cxx_namespaces {
+ quote! {
+ root::__BindgenUnionField<#ty>
+ }
+ } else {
+ quote! {
+ __BindgenUnionField<#ty>
+ }
+ }
+ } else {
+ helpers::blob(self.layout())
+ };
+
let unit_field_name = format!("_bitfield_{}", self.nth());
let unit_field_ident = ctx.rust_ident(&unit_field_name);