Skip to content

Commit f686751

Browse files
committed
Fix bitfield-linux-32.hpp to not hit #1538.
The test was failing.
1 parent d52622e commit f686751

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

tests/expectations/tests/bitfield-linux-32.rs

+29-9
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ where
5757
pub fn get(&self, bit_offset: usize, bit_width: u8) -> u64 {
5858
debug_assert!(bit_width <= 64);
5959
debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
60-
debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
60+
debug_assert!(
61+
(bit_offset + (bit_width as usize)) / 8 <=
62+
self.storage.as_ref().len()
63+
);
6164
let mut val = 0;
6265
for i in 0..(bit_width as usize) {
6366
if self.get_bit(i + bit_offset) {
@@ -75,7 +78,10 @@ where
7578
pub fn set(&mut self, bit_offset: usize, bit_width: u8, val: u64) {
7679
debug_assert!(bit_width <= 64);
7780
debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
78-
debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
81+
debug_assert!(
82+
(bit_offset + (bit_width as usize)) / 8 <=
83+
self.storage.as_ref().len()
84+
);
7985
for i in 0..(bit_width as usize) {
8086
let mask = 1 << i;
8187
let val_bit_is_set = val & mask == mask;
@@ -89,28 +95,35 @@ where
8995
}
9096
}
9197
#[repr(C, packed(4))]
92-
#[repr(align(4))]
9398
#[derive(Debug, Default, Copy, Clone)]
9499
pub struct Test {
100+
pub foo: u64,
95101
pub _bitfield_1: __BindgenBitfieldUnit<[u8; 8usize], u64>,
96102
}
97103
#[test]
98104
fn bindgen_test_layout_Test() {
99105
assert_eq!(
100106
::std::mem::size_of::<Test>(),
101-
8usize,
107+
16usize,
102108
concat!("Size of: ", stringify!(Test))
103109
);
104110
assert_eq!(
105111
::std::mem::align_of::<Test>(),
106112
4usize,
107113
concat!("Alignment of ", stringify!(Test))
108114
);
115+
assert_eq!(
116+
unsafe { &(*(::std::ptr::null::<Test>())).foo as *const _ as usize },
117+
0usize,
118+
concat!("Offset of field: ", stringify!(Test), "::", stringify!(foo))
119+
);
109120
}
110121
impl Test {
111122
#[inline]
112123
pub fn x(&self) -> u64 {
113-
unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 56u8) as u64) }
124+
unsafe {
125+
::std::mem::transmute(self._bitfield_1.get(0usize, 56u8) as u64)
126+
}
114127
}
115128
#[inline]
116129
pub fn set_x(&mut self, val: u64) {
@@ -121,7 +134,9 @@ impl Test {
121134
}
122135
#[inline]
123136
pub fn y(&self) -> u64 {
124-
unsafe { ::std::mem::transmute(self._bitfield_1.get(56usize, 8u8) as u64) }
137+
unsafe {
138+
::std::mem::transmute(self._bitfield_1.get(56usize, 8u8) as u64)
139+
}
125140
}
126141
#[inline]
127142
pub fn set_y(&mut self, val: u64) {
@@ -131,9 +146,14 @@ impl Test {
131146
}
132147
}
133148
#[inline]
134-
pub fn new_bitfield_1(x: u64, y: u64) -> __BindgenBitfieldUnit<[u8; 8usize], u64> {
135-
let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 8usize], u64> =
136-
Default::default();
149+
pub fn new_bitfield_1(
150+
x: u64,
151+
y: u64,
152+
) -> __BindgenBitfieldUnit<[u8; 8usize], u64> {
153+
let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<
154+
[u8; 8usize],
155+
u64,
156+
> = Default::default();
137157
__bindgen_bitfield_unit.set(0usize, 56u8, {
138158
let x: u64 = unsafe { ::std::mem::transmute(x) };
139159
x as u64

tests/headers/bitfield-linux-32.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
typedef unsigned long long uint64_t;
44

55
struct Test {
6+
uint64_t foo;
67
uint64_t x : 56;
78
uint64_t y : 8;
89
};

0 commit comments

Comments
 (0)