mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-09 09:03:24 +00:00
Fix build with GCC 7.5
A recent change to 'struct field' caused a build failure with GCC
7.5.0, as reported by Tom de Vries:
/data/vries/gdb/src/gdb/gdbtypes.h:721:51: error:
‘field::m_accessibility’ is too small to hold all values of ‘enum
class accessibility’ [-Werror]
ENUM_BITFIELD (accessibility) m_accessibility : 2;
^
Mark Wielaard pointed out that this was a GCC bug:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51242
This patch works around the bug by changing several members not to be
bitfields. It reduces the size of the enum's underlying type,
instead.
I also changed m_bitsize to no longer be a bitfield -- that was done
for packing reasons in ancient times, but with m_accessibility not
being a bitfield, this no longer matters.
I removed fn_field::dummy. In earlier times it was somewhat normal in
gdb to have these dummy fields to keep track of any available padding.
However, since the advent of "ptype/o", there doesn't seem to be any
need for this.
This patch does not change the size of struct field, fn_field, or
decl_field on 64-bit hosts.
This commit is contained in:
@@ -534,7 +534,7 @@ union field_location
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Accessibility of a member. */
|
/* Accessibility of a member. */
|
||||||
enum class accessibility : unsigned
|
enum class accessibility : unsigned char
|
||||||
{
|
{
|
||||||
/* It's important that this be 0 so that fields default to
|
/* It's important that this be 0 so that fields default to
|
||||||
public. */
|
public. */
|
||||||
@@ -717,8 +717,6 @@ struct field
|
|||||||
|
|
||||||
unsigned int m_artificial : 1;
|
unsigned int m_artificial : 1;
|
||||||
|
|
||||||
/* Accessibility of the field. */
|
|
||||||
ENUM_BITFIELD (accessibility) m_accessibility : 2;
|
|
||||||
/* Whether the field is 'virtual'. */
|
/* Whether the field is 'virtual'. */
|
||||||
bool m_virtual : 1;
|
bool m_virtual : 1;
|
||||||
/* Whether the field is 'ignored'. */
|
/* Whether the field is 'ignored'. */
|
||||||
@@ -728,13 +726,16 @@ struct field
|
|||||||
|
|
||||||
ENUM_BITFIELD(field_loc_kind) m_loc_kind : 3;
|
ENUM_BITFIELD(field_loc_kind) m_loc_kind : 3;
|
||||||
|
|
||||||
|
/* Accessibility of the field. */
|
||||||
|
enum accessibility m_accessibility;
|
||||||
|
|
||||||
/* * Size of this field, in bits, or zero if not packed.
|
/* * Size of this field, in bits, or zero if not packed.
|
||||||
If non-zero in an array type, indicates the element size in
|
If non-zero in an array type, indicates the element size in
|
||||||
bits (used only in Ada at the moment).
|
bits (used only in Ada at the moment).
|
||||||
For an unpacked field, the field's type's length
|
For an unpacked field, the field's type's length
|
||||||
says how many bytes the field occupies. */
|
says how many bytes the field occupies. */
|
||||||
|
|
||||||
unsigned int m_bitsize : 28;
|
unsigned int m_bitsize;
|
||||||
|
|
||||||
/* * In a struct or union type, type of this field.
|
/* * In a struct or union type, type of this field.
|
||||||
- In a function or member type, type of this argument.
|
- In a function or member type, type of this argument.
|
||||||
@@ -1611,8 +1612,6 @@ struct fn_field
|
|||||||
|
|
||||||
unsigned int is_const:1;
|
unsigned int is_const:1;
|
||||||
unsigned int is_volatile:1;
|
unsigned int is_volatile:1;
|
||||||
/* Accessibility of the field. */
|
|
||||||
ENUM_BITFIELD (accessibility) accessibility : 2;
|
|
||||||
unsigned int is_artificial:1;
|
unsigned int is_artificial:1;
|
||||||
|
|
||||||
/* * A stub method only has some fields valid (but they are enough
|
/* * A stub method only has some fields valid (but they are enough
|
||||||
@@ -1633,9 +1632,8 @@ struct fn_field
|
|||||||
|
|
||||||
ENUM_BITFIELD (dwarf_defaulted_attribute) defaulted : 2;
|
ENUM_BITFIELD (dwarf_defaulted_attribute) defaulted : 2;
|
||||||
|
|
||||||
/* * Unused. */
|
/* Accessibility of the field. */
|
||||||
|
enum accessibility accessibility;
|
||||||
unsigned int dummy:6;
|
|
||||||
|
|
||||||
/* * Index into that baseclass's virtual function table, minus 2;
|
/* * Index into that baseclass's virtual function table, minus 2;
|
||||||
else if static: VOFFSET_STATIC; else: 0. */
|
else if static: VOFFSET_STATIC; else: 0. */
|
||||||
@@ -1658,7 +1656,7 @@ struct decl_field
|
|||||||
struct type *type;
|
struct type *type;
|
||||||
|
|
||||||
/* Accessibility of the field. */
|
/* Accessibility of the field. */
|
||||||
ENUM_BITFIELD (accessibility) accessibility : 2;
|
enum accessibility accessibility;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* * C++ language-specific information for TYPE_CODE_STRUCT and
|
/* * C++ language-specific information for TYPE_CODE_STRUCT and
|
||||||
|
|||||||
Reference in New Issue
Block a user