> In a desparate try to get some testcases which do have BLKmode bit-fields
> I bootstrapped and regtested the below patch (as part of a larger patch,
> though) on seven architectures with all languages (on two without Ada).

Yet it's easy in Ada on platforms with strict alignment, e.g. SPARC:

package P is

  type Rec1 is record
    I1 : Integer;
    I2 : Integer;
    I3 : Integer;
  end record;

  type R2 is record
    B : Boolean;
    R : Rec1;
  end record;
  pragma Pack (R2);

end P;

(gdb) p debug_tree(0x2aaaaab2bdc0)
 <field_decl 0x2aaaaab2bdc0 r
    type <record_type 0x2aaaaabc64d0 p__rec1 sizes-gimplified visited BLK
        size <integer_cst 0x2aaaaab27f90 constant visited 96>
        unit size <integer_cst 0x2aaaaabd7d20 constant visited 12>
        align 32 symtab 0 alias set -1 canonical type 0x2aaaaabc64d0
        fields <field_decl 0x2aaaaab2bb40 i1 type <integer_type 0x2aaaaabc6580 
integer>
            nonaddressable SI file p.ads line 4 col 5
            size <integer_cst 0x2aaaaaaf1420 constant visited 32>
            unit size <integer_cst 0x2aaaaaaf1090 constant visited 4>
            align 32 offset_align 64
            offset <integer_cst 0x2aaaaaaf1b40 constant visited 0>
            bit offset <integer_cst 0x2aaaaaaf1b70 constant 0> context 
<record_type 0x2aaaaabc64d0 p__rec1> chain <field_decl 0x2aaaaab2bbe0 i2>> 
Ada size <integer_cst 0x2aaaaab27f90 96>
        reference_to_this <reference_type 0x2aaaaabc6630> chain <type_decl 
0x2aaaaab34540 p__rec1>>
    external packed bit-field BLK file p.ads line 11 col 5 size <integer_cst 
0x2aaaaab27f90 96> unit size <integer_cst 0x2aaaaabd7d20 12>
    align 8 offset_align 64 offset <integer_cst 0x2aaaaaaf1b40 0>
    bit offset <integer_cst 0x2aaaaaaf1180 type <integer_type 0x2aaaaab010b0 
bit_size_type> constant visited 8> bit_field_type <record_type 0x2aaaaabc64d0 
p__rec1> context <record_type 0x2aaaaabc6790 p__r2>>

We set DECL_BIT_FIELD in the front-end because the field is misaligned.

-- 
Eric Botcazou

Reply via email to