@@ -29,8 +29,11 @@ struct MemberSize {
2929
3030#[ derive( Debug , Clone , PartialEq , Eq ) ]
3131enum ResolvedGroup {
32+ /// An index into a list of members
3233 Single ( usize ) ,
34+ /// Non-overlapping members with bit-offset of start
3335 Struct ( u64 , Vec < ResolvedGroup > ) ,
36+ /// Overlapping members with bit-offset of start
3437 Union ( u64 , Vec < ResolvedGroup > ) ,
3538}
3639
@@ -399,36 +402,25 @@ fn apply_groups(
399402 match group {
400403 ResolvedGroup :: Single ( index) => {
401404 let member = & members[ index] ;
402-
403- // TODO : Fix inner-offset being larger than `member.offset`
404-
405+ let member_bit_offset = member. offset * 8 ;
405406 match ( member. bitfield_position , member. bitfield_size ) {
406407 ( Some ( bit_pos) , bit_width) => {
407408 structure. insert_bitwise (
408409 & member. ty ,
409410 & member. name ,
410- ( member . offset - offset) * 8 + bit_pos,
411+ member_bit_offset - offset + bit_pos,
411412 bit_width. map ( |w| w as u8 ) ,
412413 false ,
413414 member. access ,
414415 member. scope ,
415416 ) ;
416417 }
417- ( None , _) if offset > member. offset => {
418- structure. insert (
419- & member. ty ,
420- & member. name ,
421- 0 ,
422- false ,
423- member. access ,
424- member. scope ,
425- ) ;
426- }
427418 ( None , _) => {
428- structure. insert (
419+ structure. insert_bitwise (
429420 & member. ty ,
430421 & member. name ,
431- member. offset - offset,
422+ member_bit_offset - offset,
423+ None ,
432424 false ,
433425 member. access ,
434426 member. scope ,
@@ -439,10 +431,11 @@ fn apply_groups(
439431 ResolvedGroup :: Struct ( inner_offset, children) => {
440432 let mut inner = StructureBuilder :: new ( ) ;
441433 apply_groups ( members, & mut inner, children, inner_offset) ;
442- structure. insert (
434+ structure. insert_bitwise (
443435 & Conf :: new ( Type :: structure ( inner. finalize ( ) . as_ref ( ) ) , MAX_CONFIDENCE ) ,
444436 & format ! ( "__inner{}" , i) ,
445437 inner_offset - offset,
438+ None ,
446439 false ,
447440 MemberAccess :: PublicAccess ,
448441 MemberScope :: NoScope ,
@@ -452,10 +445,11 @@ fn apply_groups(
452445 let mut inner = StructureBuilder :: new ( ) ;
453446 inner. structure_type ( StructureType :: UnionStructureType ) ;
454447 apply_groups ( members, & mut inner, children, inner_offset) ;
455- structure. insert (
448+ structure. insert_bitwise (
456449 & Conf :: new ( Type :: structure ( inner. finalize ( ) . as_ref ( ) ) , MAX_CONFIDENCE ) ,
457450 & format ! ( "__inner{}" , i) ,
458451 inner_offset - offset,
452+ None ,
459453 false ,
460454 MemberAccess :: PublicAccess ,
461455 MemberScope :: NoScope ,
0 commit comments