Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Burgess <andrew.burgess@embecosm.com>
To: Pedro Alves <pedro@palves.net>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 2/3] Use type_instance_flags more throughout
Date: Wed, 26 Aug 2020 16:21:09 +0100	[thread overview]
Message-ID: <20200826152109.GV853475@embecosm.com> (raw)
In-Reply-To: <20200821144523.19451-3-pedro@palves.net>

* Pedro Alves <pedro@palves.net> [2020-08-21 15:45:22 +0100]:

> The next patch in this series will rewrites enum_flags fixing some API
> holes.  That would cause build failures around code using
> type_instance_flags.  Or rather, that should be using it, but wasn't.
> 
> This patch fixes it by using type_instance_flags throughout instead of
> plain integers.
> 
> Note that we can't make the seemingly obvious change to struct
> type::instance_flags:
> 
>  -  unsigned instance_flags : 9;
>  +  ENUM_BITFIELD (type_instance_flag_value) instance_flags : 9;
> 
> Because G++ complains then that 9 bits isn't sufficient for holding
> all values of type_instance_flag_value.
> 
> So the patch adds a cast to TYPE_INSTANCE_FLAGS, and adds a separate
> SET_TYPE_INSTANCE_FLAGS macro.
> 
> gdb/ChangeLog:
> 
> 	* dwarf2/read.c (read_tag_pointer_type): Use type_instance_flags.
> 	* eval.c (fake_method::fake_method): Use SET_TYPE_INSTANCE_FLAGS.
> 	* gdbarch.h, gdbarch.c: Regenerate.
> 	* gdbarch.sh (address_class_type_flags): Use type_instance_flags.
> 	(address_class_name_to_type_flags): Use type_instance_flags and
> 	bool.
> 	* gdbtypes.c (address_space_name_to_int)
> 	(address_space_int_to_name, make_qualified_type): Use
> 	type_instance_flags.
> 	(make_qualified_type): Use type_instance_flags and
> 	SET_TYPE_INSTANCE_FLAGS.
> 	(make_type_with_address_space, make_cv_type, make_vector_type)
> 	(check_typedef): Use type_instance_flags.
> 	(recursive_dump_type): Cast type_instance_flags to unsigned for
> 	printing.
> 	(copy_type_recursive): Use SET_TYPE_INSTANCE_FLAGS.
> 	* gdbtypes.h (TYPE_INSTANCE_FLAGS): Return a type_instance_flags.
> 	(SET_TYPE_INSTANCE_FLAGS): New.
> 	(address_space_name_to_int, address_space_int_to_name)
> 	(make_type_with_address_space): Pass flags using
> 	type_instance_flags instead of int.
> 	* stabsread.c (cleanup_undefined_types_noname): Use
> 	SET_TYPE_INSTANCE_FLAGS.
> 	* type-stack.c (type_stack::follow_types): Use type_instance_flags.
> ---
>  gdb/dwarf2/read.c |  7 +++----
>  gdb/eval.c        |  2 +-
>  gdb/gdbarch.c     |  6 +++---
>  gdb/gdbarch.h     | 12 ++++++------
>  gdb/gdbarch.sh    |  8 ++++----
>  gdb/gdbtypes.c    | 58 ++++++++++++++++++++++++++++++-------------------------
>  gdb/gdbtypes.h    | 15 +++++++++-----
>  gdb/stabsread.c   |  2 +-
>  gdb/type-stack.c  |  4 ++--
>  9 files changed, 62 insertions(+), 52 deletions(-)
> 
> diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
> index 0ac8533263..4ced5ac02b 100644
> --- a/gdb/dwarf2/read.c
> +++ b/gdb/dwarf2/read.c
> @@ -17292,10 +17292,9 @@ read_tag_pointer_type (struct die_info *die, struct dwarf2_cu *cu)
>      {
>        if (gdbarch_address_class_type_flags_p (gdbarch))
>  	{
> -	  int type_flags;
> -
> -	  type_flags = gdbarch_address_class_type_flags
> -			 (gdbarch, byte_size, addr_class);
> +	  type_instance_flags type_flags
> +	    = gdbarch_address_class_type_flags (gdbarch, byte_size,
> +						addr_class);
>  	  gdb_assert ((type_flags & ~TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
>  		      == 0);
>  	  type = make_type_with_address_space (type, type_flags);
> diff --git a/gdb/eval.c b/gdb/eval.c
> index c62c35f318..cd300ddfef 100644
> --- a/gdb/eval.c
> +++ b/gdb/eval.c
> @@ -659,7 +659,7 @@ fake_method::fake_method (type_instance_flags flags,
>    TYPE_LENGTH (type) = 1;
>    type->set_code (TYPE_CODE_METHOD);
>    TYPE_CHAIN (type) = type;
> -  TYPE_INSTANCE_FLAGS (type) = flags;
> +  SET_TYPE_INSTANCE_FLAGS (type, flags);
>    if (num_types > 0)
>      {
>        if (param_types[num_types - 1] == NULL)
> diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
> index f8fe03ca68..2be959ecfc 100644
> --- a/gdb/gdbarch.c
> +++ b/gdb/gdbarch.c
> @@ -3501,7 +3501,7 @@ gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch)
>    return gdbarch->address_class_type_flags != NULL;
>  }
>  
> -int
> +type_instance_flags
>  gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class)
>  {
>    gdb_assert (gdbarch != NULL);
> @@ -3566,8 +3566,8 @@ gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch)
>    return gdbarch->address_class_name_to_type_flags != NULL;
>  }
>  
> -int
> -gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr)
> +bool
> +gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, type_instance_flags *type_flags_ptr)
>  {
>    gdb_assert (gdbarch != NULL);
>    gdb_assert (gdbarch->address_class_name_to_type_flags != NULL);
> diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
> index 7a3060e628..8a4a384fda 100644
> --- a/gdb/gdbarch.h
> +++ b/gdb/gdbarch.h
> @@ -848,8 +848,8 @@ extern void set_gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch, i
>  
>  extern int gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch);
>  
> -typedef int (gdbarch_address_class_type_flags_ftype) (int byte_size, int dwarf2_addr_class);
> -extern int gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class);
> +typedef type_instance_flags (gdbarch_address_class_type_flags_ftype) (int byte_size, int dwarf2_addr_class);
> +extern type_instance_flags gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class);
>  extern void set_gdbarch_address_class_type_flags (struct gdbarch *gdbarch, gdbarch_address_class_type_flags_ftype *address_class_type_flags);
>  
>  extern int gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch);
> @@ -866,13 +866,13 @@ extern bool gdbarch_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_by
>  extern void set_gdbarch_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op);
>  
>  /* Return the appropriate type_flags for the supplied address class.
> -   This function should return 1 if the address class was recognized and
> -   type_flags was set, zero otherwise. */
> +   This function should return true if the address class was recognized and
> +   type_flags was set, false otherwise. */
>  
>  extern int gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch);
>  
> -typedef int (gdbarch_address_class_name_to_type_flags_ftype) (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr);
> -extern int gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr);
> +typedef bool (gdbarch_address_class_name_to_type_flags_ftype) (struct gdbarch *gdbarch, const char *name, type_instance_flags *type_flags_ptr);
> +extern bool gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, type_instance_flags *type_flags_ptr);
>  extern void set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags);
>  
>  /* Is a register in a group */
> diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
> index 6d3c5c889d..7e9204119b 100755
> --- a/gdb/gdbarch.sh
> +++ b/gdb/gdbarch.sh
> @@ -689,16 +689,16 @@ v;int;cannot_step_breakpoint;;;0;0;;0
>  # See comment in target.h about continuable, steppable and
>  # non-steppable watchpoints.
>  v;int;have_nonsteppable_watchpoint;;;0;0;;0
> -F;int;address_class_type_flags;int byte_size, int dwarf2_addr_class;byte_size, dwarf2_addr_class
> +F;type_instance_flags;address_class_type_flags;int byte_size, int dwarf2_addr_class;byte_size, dwarf2_addr_class
>  M;const char *;address_class_type_flags_to_name;int type_flags;type_flags
>  # Execute vendor-specific DWARF Call Frame Instruction.  OP is the instruction.
>  # FS are passed from the generic execute_cfa_program function.
>  m;bool;execute_dwarf_cfa_vendor_op;gdb_byte op, struct dwarf2_frame_state *fs;op, fs;;default_execute_dwarf_cfa_vendor_op;;0
>  
>  # Return the appropriate type_flags for the supplied address class.
> -# This function should return 1 if the address class was recognized and
> -# type_flags was set, zero otherwise.
> -M;int;address_class_name_to_type_flags;const char *name, int *type_flags_ptr;name, type_flags_ptr
> +# This function should return true if the address class was recognized and
> +# type_flags was set, false otherwise.
> +M;bool;address_class_name_to_type_flags;const char *name, type_instance_flags *type_flags_ptr;name, type_flags_ptr
>  # Is a register in a group
>  m;int;register_reggroup_p;int regnum, struct reggroup *reggroup;regnum, reggroup;;default_register_reggroup_p;;0
>  # Fetch the pointer to the ith function argument.
> diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
> index c1eb03d898..64e44bfe23 100644
> --- a/gdb/gdbtypes.c
> +++ b/gdb/gdbtypes.c
> @@ -574,11 +574,11 @@ lookup_function_type_with_arguments (struct type *type,
>  /* Identify address space identifier by name --
>     return the integer flag defined in gdbtypes.h.  */
>  
> -int
> +type_instance_flags
>  address_space_name_to_int (struct gdbarch *gdbarch,
>  			   const char *space_identifier)
>  {
> -  int type_flags;
> +  type_instance_flags type_flags;
>  
>    /* Check for known address space delimiters.  */
>    if (!strcmp (space_identifier, "code"))
> @@ -598,7 +598,8 @@ address_space_name_to_int (struct gdbarch *gdbarch,
>     gdbtypes.h -- return the string version of the adress space name.  */
>  
>  const char *
> -address_space_int_to_name (struct gdbarch *gdbarch, int space_flag)
> +address_space_int_to_name (struct gdbarch *gdbarch,
> +			   type_instance_flags space_flag)
>  {
>    if (space_flag & TYPE_INSTANCE_FLAG_CODE_SPACE)
>      return "code";
> @@ -617,7 +618,7 @@ address_space_int_to_name (struct gdbarch *gdbarch, int space_flag)
>     STORAGE must be in the same obstack as TYPE.  */
>  
>  static struct type *
> -make_qualified_type (struct type *type, int new_flags,
> +make_qualified_type (struct type *type, type_instance_flags new_flags,
>  		     struct type *storage)
>  {
>    struct type *ntype;
> @@ -657,7 +658,7 @@ make_qualified_type (struct type *type, int new_flags,
>    TYPE_CHAIN (type) = ntype;
>  
>    /* Now set the instance flags and return the new type.  */
> -  TYPE_INSTANCE_FLAGS (ntype) = new_flags;
> +  SET_TYPE_INSTANCE_FLAGS (ntype, new_flags);
>  
>    /* Set length of new type to that of the original type.  */
>    TYPE_LENGTH (ntype) = TYPE_LENGTH (type);
> @@ -675,13 +676,14 @@ make_qualified_type (struct type *type, int new_flags,
>     representations.  */
>  
>  struct type *
> -make_type_with_address_space (struct type *type, int space_flag)
> +make_type_with_address_space (struct type *type,
> +			      type_instance_flags space_flag)
>  {
> -  int new_flags = ((TYPE_INSTANCE_FLAGS (type)
> -		    & ~(TYPE_INSTANCE_FLAG_CODE_SPACE
> -			| TYPE_INSTANCE_FLAG_DATA_SPACE
> -		        | TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL))
> -		   | space_flag);
> +  type_instance_flags new_flags = ((TYPE_INSTANCE_FLAGS (type)
> +				    & ~(TYPE_INSTANCE_FLAG_CODE_SPACE
> +					| TYPE_INSTANCE_FLAG_DATA_SPACE
> +					| TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL))
> +				   | space_flag);
>  
>    return make_qualified_type (type, new_flags, NULL);
>  }
> @@ -705,9 +707,9 @@ make_cv_type (int cnst, int voltl,
>  {
>    struct type *ntype;	/* New type */
>  
> -  int new_flags = (TYPE_INSTANCE_FLAGS (type)
> -		   & ~(TYPE_INSTANCE_FLAG_CONST 
> -		       | TYPE_INSTANCE_FLAG_VOLATILE));
> +  type_instance_flags new_flags = (TYPE_INSTANCE_FLAGS (type)
> +				   & ~(TYPE_INSTANCE_FLAG_CONST
> +				       | TYPE_INSTANCE_FLAG_VOLATILE));
>  
>    if (cnst)
>      new_flags |= TYPE_INSTANCE_FLAG_CONST;
> @@ -1410,7 +1412,6 @@ void
>  make_vector_type (struct type *array_type)
>  {
>    struct type *inner_array, *elt_type;
> -  int flags;
>  
>    /* Find the innermost array type, in case the array is
>       multi-dimensional.  */
> @@ -1421,7 +1422,8 @@ make_vector_type (struct type *array_type)
>    elt_type = TYPE_TARGET_TYPE (inner_array);
>    if (elt_type->code () == TYPE_CODE_INT)
>      {
> -      flags = TYPE_INSTANCE_FLAGS (elt_type) | TYPE_INSTANCE_FLAG_NOTTEXT;
> +      type_instance_flags flags
> +	= TYPE_INSTANCE_FLAGS (elt_type) | TYPE_INSTANCE_FLAG_NOTTEXT;
>        elt_type = make_qualified_type (elt_type, flags, NULL);
>        TYPE_TARGET_TYPE (inner_array) = elt_type;
>      }
> @@ -2732,12 +2734,13 @@ struct type *
>  check_typedef (struct type *type)
>  {
>    struct type *orig_type = type;
> -  /* While we're removing typedefs, we don't want to lose qualifiers.
> -     E.g., const/volatile.  */
> -  int instance_flags = TYPE_INSTANCE_FLAGS (type);
>  
>    gdb_assert (type);
>  
> +  /* While we're removing typedefs, we don't want to lose qualifiers.
> +     E.g., const/volatile.  */
> +  type_instance_flags instance_flags = TYPE_INSTANCE_FLAGS (type);
> +
>    while (type->code () == TYPE_CODE_TYPEDEF)
>      {
>        if (!TYPE_TARGET_TYPE (type))
> @@ -2778,10 +2781,13 @@ check_typedef (struct type *type)
>  	 outer cast in a chain of casting win), instead of assuming
>  	 "it can't happen".  */
>        {
> -	const int ALL_SPACES = (TYPE_INSTANCE_FLAG_CODE_SPACE
> -				| TYPE_INSTANCE_FLAG_DATA_SPACE);
> -	const int ALL_CLASSES = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL;
> -	int new_instance_flags = TYPE_INSTANCE_FLAGS (type);
> +	const type_instance_flags ALL_SPACES
> +	  = (TYPE_INSTANCE_FLAG_CODE_SPACE
> +	     | TYPE_INSTANCE_FLAG_DATA_SPACE);
> +	const type_instance_flags ALL_CLASSES
> +	  = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL;
> +	type_instance_flags new_instance_flags
> +	  = TYPE_INSTANCE_FLAGS (type);
>  
>  	/* Treat code vs data spaces and address classes separately.  */
>  	if ((instance_flags & ALL_SPACES) != 0)
> @@ -5026,7 +5032,7 @@ recursive_dump_type (struct type *type, int spaces)
>    gdb_print_host_address (TYPE_CHAIN (type), gdb_stdout);
>    printf_filtered ("\n");
>    printfi_filtered (spaces, "instance_flags 0x%x", 
> -		    TYPE_INSTANCE_FLAGS (type));
> +		    (unsigned) TYPE_INSTANCE_FLAGS (type));
>    if (TYPE_CONST (type))
>      {
>        puts_filtered (" TYPE_CONST");
> @@ -5300,7 +5306,7 @@ copy_type_recursive (struct objfile *objfile,
>    if (type->name ())
>      new_type->set_name (xstrdup (type->name ()));
>  
> -  TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type);
> +  SET_TYPE_INSTANCE_FLAGS (new_type, TYPE_INSTANCE_FLAGS (type));
>    TYPE_LENGTH (new_type) = TYPE_LENGTH (type);
>  
>    /* Copy the fields.  */
> @@ -5427,7 +5433,7 @@ copy_type (const struct type *type)
>    gdb_assert (TYPE_OBJFILE_OWNED (type));
>  
>    new_type = alloc_type_copy (type);
> -  TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type);
> +  SET_TYPE_INSTANCE_FLAGS (new_type, TYPE_INSTANCE_FLAGS (type));
>    TYPE_LENGTH (new_type) = TYPE_LENGTH (type);
>    memcpy (TYPE_MAIN_TYPE (new_type), TYPE_MAIN_TYPE (type),
>  	  sizeof (struct main_type));
> diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
> index 55a6dafb7e..b42cef6137 100644
> --- a/gdb/gdbtypes.h
> +++ b/gdb/gdbtypes.h
> @@ -1585,7 +1585,10 @@ extern void allocate_gnat_aux_type (struct type *);
>       TYPE_ZALLOC (type,							       \
>  		  sizeof (*TYPE_MAIN_TYPE (type)->type_specific.func_stuff)))
>  
> -#define TYPE_INSTANCE_FLAGS(thistype) (thistype)->instance_flags
> +#define TYPE_INSTANCE_FLAGS(thistype) \
> +  type_instance_flags ((enum type_instance_flag_value) (thistype)->instance_flags)
> +#define SET_TYPE_INSTANCE_FLAGS(thistype, flags) \
> +  (thistype)->instance_flags = flags

There are some places where you've not updated a use of
TYPE_INSTANCE_FLAGS.  The patch below fixes these.  In order to find
these I changed TYPE_INSTANCE_FLAGS to make use of a member function
returning a 'const type_instance_flags'.

Feel free to take any parts of this patch you think are useful.

Thanks,
Andrew

---

commit 77f72bf3ec4f67354bb42b99b5115001f08bd492
Author: Andrew Burgess <andrew.burgess@embecosm.com>
Date:   Wed Aug 26 16:19:22 2020 +0100

    gdb: use SET_TYPE_INSTANCE_FLAGS more
    
    A few places where SET_TYPE_INSTANCE_FLAGS should be used.
    
    gdb/ChangeLog:
    
            * d-lang.c (build_d_types): Use SET_TYPE_INSTANCE_FLAGS.
            * ft32-tdep.c (ft32_gdbarch_init): Likewise.
            * gdbtypes.c (gdbtypes_post_init): Likewise.
            * gdbtypes.h (struct type) <get_instance_flags>: New member
            function.
            <set_instance_flags>: Likewise.
            (TYPE_INSTANCE_FLAGS): Update.
            (SET_TYPE_INSTANCE_FLAGS): Update.

diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 4ebb011ee9b..6b1f68b827e 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -321,10 +321,12 @@ build_d_types (struct gdbarch *gdbarch)
     = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
 		       "real", gdbarch_long_double_format (gdbarch));
 
-  TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_byte)
-    |= TYPE_INSTANCE_FLAG_NOTTEXT;
-  TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_ubyte)
-    |= TYPE_INSTANCE_FLAG_NOTTEXT;
+  SET_TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_byte,
+			   (TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_byte)
+			    | TYPE_INSTANCE_FLAG_NOTTEXT));
+  SET_TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_ubyte,
+			   (TYPE_INSTANCE_FLAGS (builtin_d_type->builtin_ubyte)
+			    | TYPE_INSTANCE_FLAG_NOTTEXT));
 
   /* Imaginary and complex types.  */
   builtin_d_type->builtin_ifloat
diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c
index 8ce16c06505..c3a83149bec 100644
--- a/gdb/ft32-tdep.c
+++ b/gdb/ft32-tdep.c
@@ -577,7 +577,9 @@ ft32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   func_void_type = make_function_type (void_type, NULL);
   tdep->pc_type = arch_pointer_type (gdbarch, 4 * TARGET_CHAR_BIT, NULL,
 				     func_void_type);
-  TYPE_INSTANCE_FLAGS (tdep->pc_type) |= TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
+  SET_TYPE_INSTANCE_FLAGS (tdep->pc_type,
+			   (TYPE_INSTANCE_FLAGS (tdep->pc_type)
+			    | TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1));
 
   set_gdbarch_num_regs (gdbarch, FT32_NUM_REGS);
   set_gdbarch_sp_regnum (gdbarch, FT32_SP_REGNUM);
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 64e44bfe23d..394abaae106 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -5823,10 +5823,12 @@ gdbtypes_post_init (struct gdbarch *gdbarch)
     = arch_integer_type (gdbarch, 128, 0, "int128_t");
   builtin_type->builtin_uint128
     = arch_integer_type (gdbarch, 128, 1, "uint128_t");
-  TYPE_INSTANCE_FLAGS (builtin_type->builtin_int8) |=
-    TYPE_INSTANCE_FLAG_NOTTEXT;
-  TYPE_INSTANCE_FLAGS (builtin_type->builtin_uint8) |=
-    TYPE_INSTANCE_FLAG_NOTTEXT;
+  SET_TYPE_INSTANCE_FLAGS (builtin_type->builtin_int8,
+			   (TYPE_INSTANCE_FLAGS (builtin_type->builtin_int8)
+			    | TYPE_INSTANCE_FLAG_NOTTEXT));
+  SET_TYPE_INSTANCE_FLAGS (builtin_type->builtin_uint8,
+			   (TYPE_INSTANCE_FLAGS (builtin_type->builtin_uint8)
+			    | TYPE_INSTANCE_FLAG_NOTTEXT));
 
   /* Wide character types.  */
   builtin_type->builtin_char16
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index b42cef61371..9c0289b18b2 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -1037,6 +1037,18 @@ struct type
     this->field (0).set_type (index_type);
   }
 
+  /* Return the instance flags converted to the correct type.  */
+  const type_instance_flags get_instance_flags () const
+  {
+    return type_instance_flags ((enum type_instance_flag_value) this->instance_flags);
+  }
+
+  /* Set the instance flags.  */
+  void set_instance_flags (type_instance_flags flags)
+  {
+    this->instance_flags = flags;
+  }
+
   /* Get the bounds bounds of this type.  The type must be a range type.  */
   range_bounds *bounds () const
   {
@@ -1585,10 +1597,9 @@ extern void allocate_gnat_aux_type (struct type *);
      TYPE_ZALLOC (type,							       \
 		  sizeof (*TYPE_MAIN_TYPE (type)->type_specific.func_stuff)))
 
-#define TYPE_INSTANCE_FLAGS(thistype) \
-  type_instance_flags ((enum type_instance_flag_value) (thistype)->instance_flags)
-#define SET_TYPE_INSTANCE_FLAGS(thistype, flags) \
-  (thistype)->instance_flags = flags
+#define TYPE_INSTANCE_FLAGS(thistype) ((thistype)->get_instance_flags ())
+#define SET_TYPE_INSTANCE_FLAGS(thistype, flags)	\
+  ((thistype)->set_instance_flags (flags))
 #define TYPE_MAIN_TYPE(thistype) (thistype)->main_type
 #define TYPE_TARGET_TYPE(thistype) TYPE_MAIN_TYPE(thistype)->target_type
 #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type


  parent reply	other threads:[~2020-08-26 15:21 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-21 14:45 [PATCH 0/3] Rewrite enum_flags, add unit tests, fix problems Pedro Alves
2020-08-21 14:45 ` [PATCH 1/3] Rewrite valid-expr.h's internals in terms of the detection idiom (C++17/N4502) Pedro Alves
2020-09-28 18:59   ` Tom Tromey
2020-09-28 19:58     ` Luis Machado via Gdb-patches
2020-09-28 20:00       ` Tom Tromey
2020-09-29 13:04         ` Tom Tromey
2020-09-29 19:24           ` Pedro Alves
2020-09-29 22:50             ` [pushed] Tweak gdbsupport/valid-expr.h for GCC 6, fix build (Re: [PATCH 1/3] Rewrite valid-expr.h's internals in terms of the detection idiom (C++17/N4502)) Pedro Alves
2020-08-21 14:45 ` [PATCH 2/3] Use type_instance_flags more throughout Pedro Alves
2020-08-25 11:36   ` Luis Machado
2020-09-14 11:56     ` Pedro Alves
2020-08-26 10:06   ` Andrew Burgess
2020-09-14 12:54     ` Pedro Alves
2020-08-26 15:21   ` Andrew Burgess [this message]
2020-09-14 13:53     ` Pedro Alves
2020-09-11 20:21   ` Tom Tromey
2020-09-14 19:26     ` Pedro Alves
2020-08-21 14:45 ` [PATCH 3/3] Rewrite enum_flags, add unit tests, fix problems Pedro Alves
2020-08-21 15:51 ` [PATCH 0/3] " Andrew Burgess
2020-09-11 20:26   ` 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=20200826152109.GV853475@embecosm.com \
    --to=andrew.burgess@embecosm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pedro@palves.net \
    /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