Skip to content

Commit 1f3fbbe

Browse files
estebankdanlehmann
authored andcommitted
Check that non-intrinsic integer bitfields properly check the set bits
1 parent ec057e1 commit 1f3fbbe

11 files changed

+71
-1
lines changed

bitbybit/src/bitfield/parsing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub fn parse(fields: &Fields, base_data_size: BaseDataSize) -> Result<Vec<FieldD
1414
let mut field_definitions = Vec::with_capacity(fields.len());
1515

1616
for field in fields {
17-
match parse_field(base_data_size.internal, field) {
17+
match parse_field(base_data_size.exposed, field) {
1818
Ok(def) => field_definitions.push(def),
1919
Err(ts) => return Err(ts),
2020
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use bitbybit::bitfield;
2+
3+
#[bitfield(u7, default = 0)]
4+
struct Test {
5+
#[bit(0, rw)]
6+
array_field: [bool; 8],
7+
}
8+
9+
fn main() {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
error: bitfield!: Array-field array_field requires 8 bits for the array, but only has (7)
2+
--> tests/no_compile/invalid_bit_pos/invalid_bit_pos_array_field_u7.rs:5:5
3+
|
4+
5 | #[bit(0, rw)]
5+
| ^^^^^^^^^^^^^
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use bitbybit::bitfield;
2+
3+
#[bitfield(u7, default = 0)]
4+
struct Test {
5+
#[bits([0, 7], rw)]
6+
multi_bit_field: u2,
7+
}
8+
9+
fn main() {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
error: bitfield!: Field multi_bit_field requires 8 bits, but only has (7)
2+
--> tests/no_compile/invalid_bit_pos/invalid_bit_pos_array_u7.rs:5:5
3+
|
4+
5 | #[bits([0, 7], rw)]
5+
| ^^^^^^^^^^^^^^^^^^^
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use bitbybit::bitfield;
2+
3+
#[bitfield(u7, default = 0)]
4+
struct Test {
5+
#[bit(7, rw)]
6+
field: bool,
7+
}
8+
9+
fn main() {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
error: bitfield!: Field field requires 8 bits, but only has (7)
2+
--> tests/no_compile/invalid_bit_pos/invalid_bit_pos_u7.rs:5:5
3+
|
4+
5 | #[bit(7, rw)]
5+
| ^^^^^^^^^^^^^
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use bitbybit::bitfield;
2+
3+
#[bitfield(u7, default = 0)]
4+
struct Test {
5+
#[bits([0, 6..=7], rw)]
6+
multi_bit_field: u3,
7+
}
8+
9+
fn main() {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
error: bitfield!: Field multi_bit_field requires 8 bits, but only has (7)
2+
--> tests/no_compile/invalid_bit_pos/invalid_bits_pos_array_u7.rs:5:5
3+
|
4+
5 | #[bits([0, 6..=7], rw)]
5+
| ^^^^^^^^^^^^^^^^^^^^^^^
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use bitbybit::bitfield;
2+
3+
#[bitfield(u7, default = 0)]
4+
struct Test {
5+
#[bits(6..=7, rw)]
6+
field: u2,
7+
}
8+
9+
fn main() {}

0 commit comments

Comments
 (0)