Skip to content

Commit a502187

Browse files
bend-nemilio
authored andcommitted
fix unnecessary transmute triggering on bitfield codegen
1 parent 0408333 commit a502187

File tree

1 file changed

+16
-23
lines changed

1 file changed

+16
-23
lines changed

bindgen/codegen/mod.rs

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1780,14 +1780,11 @@ impl Bitfield {
17801780

17811781
let offset = self.offset_into_unit();
17821782
let width = self.width() as u8;
1783-
let prefix = ctx.trait_prefix();
17841783

17851784
ctor_impl.append_all(quote! {
17861785
__bindgen_bitfield_unit.set_const::<#offset, #width>(
17871786
{
1788-
let #param_name: #bitfield_int_ty = unsafe {
1789-
::#prefix::mem::transmute(#param_name)
1790-
};
1787+
let #param_name: #bitfield_int_ty = #param_name as _;
17911788
#param_name as u64
17921789
}
17931790
);
@@ -2092,43 +2089,39 @@ impl<'a> FieldCodegen<'a> for Bitfield {
20922089
methods.extend(Some(quote! {
20932090
#[inline]
20942091
#access_spec fn #getter_name(&self) -> #bitfield_ty {
2095-
unsafe {
2096-
::#prefix::mem::transmute(
2097-
self.#unit_field_ident.as_ref().get(#offset, #width)
2098-
as #bitfield_int_ty
2099-
)
2100-
}
2092+
self.#unit_field_ident.as_ref().get(#offset, #width)
2093+
as #bitfield_int_ty
2094+
as _
21012095
}
21022096

21032097
#[inline]
21042098
#access_spec fn #setter_name(&mut self, val: #bitfield_ty) {
2105-
unsafe {
2106-
let val: #bitfield_int_ty = ::#prefix::mem::transmute(val);
2107-
self.#unit_field_ident.as_mut().set(
2108-
#offset,
2109-
#width,
2110-
val as u64
2111-
)
2112-
}
2099+
let val: #bitfield_int_ty = val as _;
2100+
self.#unit_field_ident.as_mut().set(
2101+
#offset,
2102+
#width,
2103+
val as u64
2104+
)
21132105
}
21142106
}));
21152107

21162108
methods.extend(Some(quote! {
21172109
#[inline]
21182110
#access_spec unsafe fn #raw_getter_name(this: *const Self) -> #bitfield_ty {
21192111
unsafe {
2120-
::#prefix::mem::transmute(<#unit_field_ty>::raw_get(
2112+
<#unit_field_ty>::raw_get(
21212113
(*::#prefix::ptr::addr_of!((*this).#unit_field_ident)).as_ref() as *const _,
21222114
#offset,
21232115
#width,
2124-
) as #bitfield_int_ty)
2116+
) as #bitfield_int_ty
2117+
as _
21252118
}
21262119
}
21272120

21282121
#[inline]
21292122
#access_spec unsafe fn #raw_setter_name(this: *mut Self, val: #bitfield_ty) {
21302123
unsafe {
2131-
let val: #bitfield_int_ty = ::#prefix::mem::transmute(val);
2124+
let val: #bitfield_int_ty = val as _;
21322125
<#unit_field_ty>::raw_set(
21332126
(*::#prefix::ptr::addr_of_mut!((*this).#unit_field_ident)).as_mut() as *mut _,
21342127
#offset,
@@ -2153,7 +2146,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
21532146
#[inline]
21542147
#access_spec fn #setter_name(&mut self, val: #bitfield_ty) {
21552148
unsafe {
2156-
let val: #bitfield_int_ty = ::#prefix::mem::transmute(val);
2149+
let val: #bitfield_int_ty = val as _;
21572150
self.#unit_field_ident.set_const::<#offset, #width>(
21582151
val as u64
21592152
)
@@ -2174,7 +2167,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
21742167
#[inline]
21752168
#access_spec unsafe fn #raw_setter_name(this: *mut Self, val: #bitfield_ty) {
21762169
unsafe {
2177-
let val: #bitfield_int_ty = ::#prefix::mem::transmute(val);
2170+
let val: #bitfield_int_ty = val as _;
21782171
<#unit_field_ty>::raw_set_const::<#offset, #width>(
21792172
::#prefix::ptr::addr_of_mut!((*this).#unit_field_ident),
21802173
val as u64,

0 commit comments

Comments
 (0)