Skip to content

Commit 33f9165

Browse files
committed
fix unnecessary transmute triggering on bitfield codegen
1 parent 23e2b01 commit 33f9165

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
@@ -1783,14 +1783,11 @@ impl Bitfield {
17831783

17841784
let offset = self.offset_into_unit();
17851785
let width = self.width() as u8;
1786-
let prefix = ctx.trait_prefix();
17871786

17881787
ctor_impl.append_all(quote! {
17891788
__bindgen_bitfield_unit.set_const::<#offset, #width>(
17901789
{
1791-
let #param_name: #bitfield_int_ty = unsafe {
1792-
::#prefix::mem::transmute(#param_name)
1793-
};
1790+
let #param_name: #bitfield_int_ty = #param_name as _;
17941791
#param_name as u64
17951792
}
17961793
);
@@ -2095,43 +2092,39 @@ impl<'a> FieldCodegen<'a> for Bitfield {
20952092
methods.extend(Some(quote! {
20962093
#[inline]
20972094
#access_spec fn #getter_name(&self) -> #bitfield_ty {
2098-
unsafe {
2099-
::#prefix::mem::transmute(
2100-
self.#unit_field_ident.as_ref().get(#offset, #width)
2101-
as #bitfield_int_ty
2102-
)
2103-
}
2095+
self.#unit_field_ident.as_ref().get(#offset, #width)
2096+
as #bitfield_int_ty
2097+
as _
21042098
}
21052099

21062100
#[inline]
21072101
#access_spec fn #setter_name(&mut self, val: #bitfield_ty) {
2108-
unsafe {
2109-
let val: #bitfield_int_ty = ::#prefix::mem::transmute(val);
2110-
self.#unit_field_ident.as_mut().set(
2111-
#offset,
2112-
#width,
2113-
val as u64
2114-
)
2115-
}
2102+
let val: #bitfield_int_ty = val as _;
2103+
self.#unit_field_ident.as_mut().set(
2104+
#offset,
2105+
#width,
2106+
val as u64
2107+
)
21162108
}
21172109
}));
21182110

21192111
methods.extend(Some(quote! {
21202112
#[inline]
21212113
#access_spec unsafe fn #raw_getter_name(this: *const Self) -> #bitfield_ty {
21222114
unsafe {
2123-
::#prefix::mem::transmute(<#unit_field_ty>::raw_get(
2115+
<#unit_field_ty>::raw_get(
21242116
(*::#prefix::ptr::addr_of!((*this).#unit_field_ident)).as_ref() as *const _,
21252117
#offset,
21262118
#width,
2127-
) as #bitfield_int_ty)
2119+
) as #bitfield_int_ty
2120+
as _
21282121
}
21292122
}
21302123

21312124
#[inline]
21322125
#access_spec unsafe fn #raw_setter_name(this: *mut Self, val: #bitfield_ty) {
21332126
unsafe {
2134-
let val: #bitfield_int_ty = ::#prefix::mem::transmute(val);
2127+
let val: #bitfield_int_ty = val as _;
21352128
<#unit_field_ty>::raw_set(
21362129
(*::#prefix::ptr::addr_of_mut!((*this).#unit_field_ident)).as_mut() as *mut _,
21372130
#offset,
@@ -2156,7 +2149,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
21562149
#[inline]
21572150
#access_spec fn #setter_name(&mut self, val: #bitfield_ty) {
21582151
unsafe {
2159-
let val: #bitfield_int_ty = ::#prefix::mem::transmute(val);
2152+
let val: #bitfield_int_ty = val as _;
21602153
self.#unit_field_ident.set_const::<#offset, #width>(
21612154
val as u64
21622155
)
@@ -2177,7 +2170,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
21772170
#[inline]
21782171
#access_spec unsafe fn #raw_setter_name(this: *mut Self, val: #bitfield_ty) {
21792172
unsafe {
2180-
let val: #bitfield_int_ty = ::#prefix::mem::transmute(val);
2173+
let val: #bitfield_int_ty = val as _;
21812174
<#unit_field_ty>::raw_set_const::<#offset, #width>(
21822175
::#prefix::ptr::addr_of_mut!((*this).#unit_field_ident),
21832176
val as u64,

0 commit comments

Comments
 (0)