"/* offset | size */ type = struct abc \{" \
" public:" \
"/* 8 | 8 */ void *field1;" \
-"/* 16:31 | 4 */ unsigned int field2 : 1;" \
+"/* 16: 0 | 4 */ unsigned int field2 : 1;" \
"/* XXX 7-bit hole */" \
"/* XXX 3-byte hole */" \
"/* 20 | 4 */ int field3;" \
"/* offset | size */ type = struct abc \{" \
" public:" \
"/* 8 | 8 */ void *field1;" \
-"/* 16:31 | 4 */ unsigned int field2 : 1;" \
+"/* 16: 0 | 4 */ unsigned int field2 : 1;" \
"/* XXX 7-bit hole */" \
"/* XXX 3-byte hole */" \
"/* 20 | 4 */ int field3;" \
"/* offset | size */ type = struct abc \{" \
" public:" \
"/* 8 | 8 */ void *field1;" \
-"/* 16:31 | 4 */ unsigned int field2 : 1;" \
+"/* 16: 0 | 4 */ unsigned int field2 : 1;" \
"/* XXX 7-bit hole */" \
"/* XXX 3-byte hole */" \
"/* 20 | 4 */ int field3;" \
gdb_test "ptype /o struct tyu" \
[string_to_regexp [multi_line \
"/* offset | size */ type = struct tyu \{" \
-"/* 0:31 | 4 */ int a1 : 1;" \
-"/* 0:28 | 4 */ int a2 : 3;" \
-"/* 0: 5 | 4 */ int a3 : 23;" \
+"/* 0: 0 | 4 */ int a1 : 1;" \
+"/* 0: 1 | 4 */ int a2 : 3;" \
+"/* 0: 4 | 4 */ int a3 : 23;" \
"/* 3: 3 | 1 */ signed char a4 : 2;" \
"/* XXX 3-bit hole */" \
"/* XXX 4-byte hole */" \
"/* 8 | 8 */ int64_t a5;" \
-"/* 16:27 | 4 */ int a6 : 5;" \
-"/* 16:56 | 8 */ int64_t a7 : 3;" \
+"/* 16: 0 | 4 */ int a6 : 5;" \
+"/* 16: 5 | 8 */ int64_t a7 : 3;" \
"/* XXX 7-byte padding */" \
"" \
" /* total size (bytes): 24 */" \
"" \
" /* total size (bytes): 8 */" \
" \} f3;" \
-"/* 24:27 | 4 */ int f4 : 5;" \
-"/* 24:26 | 4 */ unsigned int f5 : 1;" \
+"/* 24: 0 | 4 */ int f4 : 5;" \
+"/* 24: 5 | 4 */ unsigned int f5 : 1;" \
"/* XXX 2-bit hole */" \
"/* XXX 1-byte hole */" \
"/* 26 | 2 */ short f6;" \
" \} f7;" \
"/* 32 | 8 */ unsigned long f8;" \
"/* 40 | 8 */ signed char *f9;" \
-"/* 48:28 | 4 */ int f10 : 4;" \
-"/* 48:27 | 4 */ unsigned int f11 : 1;" \
-"/* 48:26 | 4 */ unsigned int f12 : 1;" \
-"/* 48:25 | 4 */ unsigned int f13 : 1;" \
-"/* 48:24 | 4 */ unsigned int f14 : 1;" \
+"/* 48: 0 | 4 */ int f10 : 4;" \
+"/* 48: 4 | 4 */ unsigned int f11 : 1;" \
+"/* 48: 5 | 4 */ unsigned int f12 : 1;" \
+"/* 48: 6 | 4 */ unsigned int f13 : 1;" \
+"/* 48: 7 | 4 */ unsigned int f14 : 1;" \
"/* XXX 7-byte hole */" \
"/* 56 | 8 */ void *f15;" \
"/* 64 | 8 */ void *f16;" \
maybe_print_hole (stream, bitpos, "hole");
- if (TYPE_FIELD_PACKED (type, field_idx))
+ if (TYPE_FIELD_PACKED (type, field_idx)
+ || offset_bitpos % TARGET_CHAR_BIT != 0)
{
- /* We're dealing with a bitfield. Print how many bits are left
- to be used. */
- unsigned int bitsize = TYPE_FIELD_BITSIZE (type, field_idx);
- /* The bitpos relative to the beginning of our container
- field. */
- unsigned int relative_bitpos;
-
- /* The following was copied from
- value.c:value_primitive_field. */
- if ((bitpos % fieldsize_bit) + bitsize <= fieldsize_bit)
- relative_bitpos = bitpos % fieldsize_bit;
- else
- relative_bitpos = bitpos % TARGET_CHAR_BIT;
+ /* We're dealing with a bitfield. Print the bit offset. */
+ fieldsize_bit = TYPE_FIELD_BITSIZE (type, field_idx);
- /* This is the exact offset (in bits) of this bitfield. */
- unsigned int bit_offset
- = (bitpos - relative_bitpos) + offset_bitpos;
+ unsigned real_bitpos = bitpos + offset_bitpos;
- /* The position of the field, relative to the beginning of the
- struct, and how many bits are left to be used in this
- container. */
- fprintf_filtered (stream, "/* %4u:%2u", bit_offset / TARGET_CHAR_BIT,
- fieldsize_bit - (relative_bitpos + bitsize));
- fieldsize_bit = bitsize;
+ fprintf_filtered (stream, "/* %4u:%2u", real_bitpos / TARGET_CHAR_BIT,
+ real_bitpos % TARGET_CHAR_BIT);
}
else
{