Make gdb property batons type-safe
authorTom Tromey <tromey@adacore.com>
Wed, 1 Mar 2023 14:59:44 +0000 (07:59 -0700)
committerTom Tromey <tromey@adacore.com>
Wed, 1 Mar 2023 22:33:03 +0000 (15:33 -0700)
gdbtypes treats dynamic property batons as 'void *', but in actuality
the only users all use dwarf2_property_baton.  This patch changes this
code to be type-safe.  If a new type is needed here, it seems like
that too could be done in a type-safe way.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdb/dwarf2/loc.c
gdb/gdbtypes.h

index 4727651027ba6f533263d323ada0c4cd2a49ebc6..bf582bcfeff8348ba4d025a8982e19883309bddf 100644 (file)
@@ -1649,8 +1649,7 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
     {
     case PROP_LOCEXPR:
       {
-       const struct dwarf2_property_baton *baton
-         = (const struct dwarf2_property_baton *) prop->baton ();
+       const struct dwarf2_property_baton *baton = prop->baton ();
        gdb_assert (baton->property_type != NULL);
 
        bool is_reference = baton->locexpr.is_reference;
@@ -1692,8 +1691,7 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
 
     case PROP_LOCLIST:
       {
-       struct dwarf2_property_baton *baton
-         = (struct dwarf2_property_baton *) prop->baton ();
+       struct dwarf2_property_baton *baton = prop->baton ();
        CORE_ADDR pc;
        const gdb_byte *data;
        struct value *val;
@@ -1724,8 +1722,7 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
 
     case PROP_ADDR_OFFSET:
       {
-       struct dwarf2_property_baton *baton
-         = (struct dwarf2_property_baton *) prop->baton ();
+       struct dwarf2_property_baton *baton = prop->baton ();
        const struct property_addr_info *pinfo;
        struct value *val;
 
@@ -1775,8 +1772,7 @@ dwarf2_compile_property_to_c (string_file *stream,
                              CORE_ADDR pc,
                              struct symbol *sym)
 {
-  struct dwarf2_property_baton *baton
-    = (struct dwarf2_property_baton *) prop->baton ();
+  struct dwarf2_property_baton *baton = prop->baton ();
   const gdb_byte *data;
   size_t size;
   dwarf2_per_cu_data *per_cu;
index c2253310666f846043f08d768d3e9e9e71bf65f8..701a64d457a95856dbc16ef7a8e49deba55c34af 100644 (file)
@@ -64,6 +64,7 @@ struct value_print_options;
 struct language_defn;
 struct dwarf2_per_cu_data;
 struct dwarf2_per_objfile;
+struct dwarf2_property_baton;
 
 /* Some macros for char-based bitfields.  */
 
@@ -289,7 +290,7 @@ union dynamic_prop_data
 
   /* Storage for dynamic property.  */
 
-  void *baton;
+  dwarf2_property_baton *baton;
 
   /* Storage of variant parts for a type.  A type with variant parts
      has all its fields "linearized" -- stored in a single field
@@ -339,7 +340,7 @@ struct dynamic_prop
     m_data.const_val = const_val;
   }
 
-  void *baton () const
+  dwarf2_property_baton *baton () const
   {
     gdb_assert (m_kind == PROP_LOCEXPR
                || m_kind == PROP_LOCLIST
@@ -348,19 +349,19 @@ struct dynamic_prop
     return m_data.baton;
   }
 
-  void set_locexpr (void *baton)
+  void set_locexpr (dwarf2_property_baton *baton)
   {
     m_kind = PROP_LOCEXPR;
     m_data.baton = baton;
   }
 
-  void set_loclist (void *baton)
+  void set_loclist (dwarf2_property_baton *baton)
   {
     m_kind = PROP_LOCLIST;
     m_data.baton = baton;
   }
 
-  void set_addr_offset (void *baton)
+  void set_addr_offset (dwarf2_property_baton *baton)
   {
     m_kind = PROP_ADDR_OFFSET;
     m_data.baton = baton;