> 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