Add initializers to comp_unit_head
authorTom Tromey <tom@tromey.com>
Sat, 16 Jul 2022 01:05:29 +0000 (19:05 -0600)
committerTom Tromey <tom@tromey.com>
Mon, 26 Dec 2022 18:01:10 +0000 (11:01 -0700)
PR symtab/29343 points out that it would be beneficial if
comp_unit_head had a constructor and used initializers.  This patch
implements this.  I'm unsure if this is sufficient to close the bug,
but at least it's a step.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29343

gdb/dwarf2/comp-unit-head.h
gdb/dwarf2/cu.h
gdb/dwarf2/read.c
gdb/dwarf2/read.h

index a7ee3e64546dd300fd243702852f83c3f696bd89..7579fe7fa290574673f4449c14b6b0bc92ebf4f0 100644 (file)
    translation, looks like this.  */
 struct comp_unit_head
 {
-  unsigned int length;
-  unsigned char version;
-  unsigned char addr_size;
-  unsigned char signed_addr_p;
-  sect_offset abbrev_sect_off;
+  unsigned int length = 0;
+  unsigned char version = 0;
+  unsigned char addr_size = 0;
+  unsigned char signed_addr_p = 0;
+  sect_offset abbrev_sect_off {};
 
   /* Size of file offsets; either 4 or 8.  */
-  unsigned int offset_size;
+  unsigned int offset_size = 0;
 
   /* Size of the length field; either 4 or 12.  */
-  unsigned int initial_length_size;
+  unsigned int initial_length_size = 0;
 
-  enum dwarf_unit_type unit_type;
+  enum dwarf_unit_type unit_type {};
 
   /* Offset to first die in this cu from the start of the cu.
      This will be the first byte following the compilation unit header.  */
-  cu_offset first_die_cu_offset;
+  cu_offset first_die_cu_offset {};
 
   /* Offset to the first byte of this compilation unit header in the
      .debug_info section, for resolving relative reference dies.  */
-  sect_offset sect_off;
+  sect_offset sect_off {};
 
   /* For types, offset in the type's DIE of the type defined by this TU.  */
-  cu_offset type_cu_offset_in_tu;
+  cu_offset type_cu_offset_in_tu {};
 
   /* 64-bit signature of this unit. For type units, it denotes the signature of
      the type (DW_UT_type in DWARF 4, additionally DW_UT_split_type in DWARF 5).
      Also used in DWARF 5, to denote the dwo id when the unit type is
      DW_UT_skeleton or DW_UT_split_compile.  */
-  ULONGEST signature;
+  ULONGEST signature = 0;
 
   /* Return the total length of the CU described by this header.  */
   unsigned int get_length () const
index 529750958711c1eb266ca1f6bfe5ed81a2116442..b126acab7b247d45459dec11898f3af217b6cb59 100644 (file)
@@ -98,7 +98,7 @@ struct dwarf2_cu
   void add_dependence (struct dwarf2_per_cu_data *ref_per_cu);
 
   /* The header of the compilation unit.  */
-  struct comp_unit_head header {};
+  struct comp_unit_head header;
 
   /* Base address of this compilation unit.  */
   gdb::optional<CORE_ADDR> base_address;
index 7bd12c107e2273600564ecdee5b2783a2c84a240..28fadb886aa814c3d13e4bb9aa273298f91065b3 100644 (file)
@@ -23580,8 +23580,6 @@ dwarf2_per_cu_data::get_header () const
       const gdb_byte *info_ptr
        = this->section->buffer + to_underlying (this->sect_off);
 
-      memset (&m_header, 0, sizeof (m_header));
-
       read_comp_unit_head (&m_header, info_ptr, this->section,
                           rcuh_kind::COMPILE);
 
index dd718266883158da73592488bd4d59102e465b12..0dc4e2e885c43c18d20230eebc7d1a9461b614c1 100644 (file)
@@ -206,7 +206,7 @@ public:
 
      Don't access this field directly, use the get_header method instead.  It
      should be private, but we can't make it private at the moment.  */
-  mutable comp_unit_head m_header {};
+  mutable comp_unit_head m_header;
 
   /* The file and directory for this CU.  This is cached so that we
      don't need to re-examine the DWO in some situations.  This may be