public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom de Vries <tdevries@suse.de>
To: Tom Tromey <tromey@adacore.com>, gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@efficios.com>,
	Keith Seitz <keiths@redhat.com>
Subject: Re: [PATCH v3 8/9] Use enum accessibility in types and member functions
Date: Wed, 22 Nov 2023 10:46:07 +0100	[thread overview]
Message-ID: <5a050134-3ab7-4d6f-b45f-45796e1cc37c@suse.de> (raw)
In-Reply-To: <20231103-field-bits-v3-8-273c40bcaf3d@adacore.com>

On 11/3/23 17:09, Tom Tromey wrote:
> This changes nested types and member functions to use the new
> 'accessibility' enum, rather than separate private/protected flags.
> This is done for consistency, but it also lets us simplify some other
> code in the next patch.
> 

FWIW, this breaks the build for me with system gcc 7.5.0:
...
/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;
                                                    ^
/data/vries/gdb/src/gdb/gdbtypes.h:1615:49: error: 
‘fn_field::accessibility’ is too small to hold all values of ‘enum class 
accessibility’ [-Werror]
    ENUM_BITFIELD (accessibility) accessibility : 2;
                                                  ^
/data/vries/gdb/src/gdb/gdbtypes.h:1661:49: error: 
‘decl_field::accessibility’ is too small to hold all values of ‘enum 
class accessibility’ [-Werror]
    ENUM_BITFIELD (accessibility) accessibility : 2;
                                                  ^
...

I can fix this by using --disable-werror.

Also builds fine when I switch to gcc 9.3.1 with --enable-werror.

Thanks,
- Tom

> Acked-By: Simon Marchi <simon.marchi@efficios.com>
> Reviewed-by: Keith Seitz <keiths@redhat.com>
> ---
>   gdb/dwarf2/read.c |  8 ++++----
>   gdb/gdbtypes.h    | 27 ++++++++++++++-------------
>   gdb/stabsread.c   |  4 ++--
>   3 files changed, 20 insertions(+), 19 deletions(-)
> 
> diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
> index e52ca5b5b83..0d8c24ad5b1 100644
> --- a/gdb/dwarf2/read.c
> +++ b/gdb/dwarf2/read.c
> @@ -11714,10 +11714,10 @@ dwarf2_add_type_defn (struct field_info *fip, struct die_info *die,
>         /* The assumed value if neither private nor protected.  */
>         break;
>       case DW_ACCESS_private:
> -      fp.is_private = 1;
> +      fp.accessibility = accessibility::PRIVATE;
>         break;
>       case DW_ACCESS_protected:
> -      fp.is_protected = 1;
> +      fp.accessibility = accessibility::PROTECTED;
>         break;
>       }
>   
> @@ -12076,10 +12076,10 @@ dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
>     switch (accessibility)
>       {
>       case DW_ACCESS_private:
> -      fnp->is_private = 1;
> +      fnp->accessibility = accessibility::PRIVATE;
>         break;
>       case DW_ACCESS_protected:
> -      fnp->is_protected = 1;
> +      fnp->accessibility = accessibility::PROTECTED;
>         break;
>       }
>   
> diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
> index bec69bdc3d1..d3c7a206b34 100644
> --- a/gdb/gdbtypes.h
> +++ b/gdb/gdbtypes.h
> @@ -1611,8 +1611,8 @@ struct fn_field
>   
>     unsigned int is_const:1;
>     unsigned int is_volatile:1;
> -  unsigned int is_private:1;
> -  unsigned int is_protected:1;
> +  /* Accessibility of the field.  */
> +  ENUM_BITFIELD (accessibility) accessibility : 2;
>     unsigned int is_artificial:1;
>   
>     /* * A stub method only has some fields valid (but they are enough
> @@ -1657,11 +1657,8 @@ struct decl_field
>   
>     struct type *type;
>   
> -  /* * True if this field was declared protected, false otherwise.  */
> -  unsigned int is_protected : 1;
> -
> -  /* * True if this field was declared private, false otherwise.  */
> -  unsigned int is_private : 1;
> +  /* Accessibility of the field.  */
> +  ENUM_BITFIELD (accessibility) accessibility : 2;
>   };
>   
>   /* * C++ language-specific information for TYPE_CODE_STRUCT and
> @@ -1984,8 +1981,10 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
>   #define TYPE_FN_FIELD_ARGS(thisfn, n) (((thisfn)[n].type)->fields ())
>   #define TYPE_FN_FIELD_CONST(thisfn, n) ((thisfn)[n].is_const)
>   #define TYPE_FN_FIELD_VOLATILE(thisfn, n) ((thisfn)[n].is_volatile)
> -#define TYPE_FN_FIELD_PRIVATE(thisfn, n) ((thisfn)[n].is_private)
> -#define TYPE_FN_FIELD_PROTECTED(thisfn, n) ((thisfn)[n].is_protected)
> +#define TYPE_FN_FIELD_PRIVATE(thisfn, n) \
> +  ((thisfn)[n].accessibility == accessibility::PRIVATE)
> +#define TYPE_FN_FIELD_PROTECTED(thisfn, n) \
> +  ((thisfn)[n].accessibility == accessibility::PROTECTED)
>   #define TYPE_FN_FIELD_ARTIFICIAL(thisfn, n) ((thisfn)[n].is_artificial)
>   #define TYPE_FN_FIELD_STUB(thisfn, n) ((thisfn)[n].is_stub)
>   #define TYPE_FN_FIELD_CONSTRUCTOR(thisfn, n) ((thisfn)[n].is_constructor)
> @@ -2008,9 +2007,9 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
>   #define TYPE_TYPEDEF_FIELD_COUNT(thistype) \
>     TYPE_CPLUS_SPECIFIC (thistype)->typedef_field_count
>   #define TYPE_TYPEDEF_FIELD_PROTECTED(thistype, n) \
> -  TYPE_TYPEDEF_FIELD (thistype, n).is_protected
> +  (TYPE_TYPEDEF_FIELD (thistype, n).accessibility == accessibility::PROTECTED)
>   #define TYPE_TYPEDEF_FIELD_PRIVATE(thistype, n)        \
> -  TYPE_TYPEDEF_FIELD (thistype, n).is_private
> +  (TYPE_TYPEDEF_FIELD (thistype, n).accessibility == accessibility::PRIVATE)
>   
>   #define TYPE_NESTED_TYPES_ARRAY(thistype)	\
>     TYPE_CPLUS_SPECIFIC (thistype)->nested_types
> @@ -2023,9 +2022,11 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
>   #define TYPE_NESTED_TYPES_COUNT(thistype) \
>     TYPE_CPLUS_SPECIFIC (thistype)->nested_types_count
>   #define TYPE_NESTED_TYPES_FIELD_PROTECTED(thistype, n) \
> -  TYPE_NESTED_TYPES_FIELD (thistype, n).is_protected
> +  (TYPE_NESTED_TYPES_FIELD (thistype, n).accessibility \
> +   == accessibility::PROTECTED)
>   #define TYPE_NESTED_TYPES_FIELD_PRIVATE(thistype, n)	\
> -  TYPE_NESTED_TYPES_FIELD (thistype, n).is_private
> +  (TYPE_NESTED_TYPES_FIELD (thistype, n).accessibility \
> +   == accessibility::PRIVATE)
>   
>   #define TYPE_IS_OPAQUE(thistype) \
>     ((((thistype)->code () == TYPE_CODE_STRUCT) \
> diff --git a/gdb/stabsread.c b/gdb/stabsread.c
> index 334371c2e46..fbf11701337 100644
> --- a/gdb/stabsread.c
> +++ b/gdb/stabsread.c
> @@ -2372,10 +2372,10 @@ read_member_functions (struct stab_field_info *fip, const char **pp,
>   	  switch (*(*pp)++)
>   	    {
>   	    case VISIBILITY_PRIVATE:
> -	      new_sublist->fn_field.is_private = 1;
> +	      new_sublist->fn_field.accessibility = accessibility::PRIVATE;
>   	      break;
>   	    case VISIBILITY_PROTECTED:
> -	      new_sublist->fn_field.is_protected = 1;
> +	      new_sublist->fn_field.accessibility = accessibility::PROTECTED;
>   	      break;
>   	    }
>   
> 


  reply	other threads:[~2023-11-22  9:44 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-03 16:09 [PATCH v3 0/9] Remove char-based bitfield macros Tom Tromey
2023-11-03 16:09 ` [PATCH v3 1/9] Use .def file to stringify type codes Tom Tromey
2023-11-03 16:09 ` [PATCH v3 2/9] Print field accessibility inline Tom Tromey
2023-11-03 16:09 ` [PATCH v3 3/9] Remove byte vectors from cplus_struct_type Tom Tromey
2023-11-03 16:09 ` [PATCH v3 4/9] Add field::is_public Tom Tromey
2023-11-03 16:09 ` [PATCH v3 5/9] Remove some QUIT calls from need_access_label_p Tom Tromey
2023-11-03 16:09 ` [PATCH v3 6/9] Remove some type field accessor macros Tom Tromey
2023-11-03 16:09 ` [PATCH v3 7/9] Remove char-based bitfield macros Tom Tromey
2023-11-03 16:09 ` [PATCH v3 8/9] Use enum accessibility in types and member functions Tom Tromey
2023-11-22  9:46   ` Tom de Vries [this message]
2023-11-22 13:54     ` Tom Tromey
2023-11-22 14:03       ` Tom Tromey
2023-11-03 16:09 ` [PATCH v3 9/9] Simplify C++ type-printing Tom Tromey
2023-11-21 21:52 ` [PATCH v3 0/9] Remove char-based bitfield macros Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5a050134-3ab7-4d6f-b45f-45796e1cc37c@suse.de \
    --to=tdevries@suse.de \
    --cc=gdb-patches@sourceware.org \
    --cc=keiths@redhat.com \
    --cc=simon.marchi@efficios.com \
    --cc=tromey@adacore.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).