[RFA] Use std::unique_ptr in dwarf2_read_debug_names

Message ID 20180519152316.18973-1-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey May 19, 2018, 3:23 p.m. UTC
  This changes dwarf2_read_debug_names to use std::unique_ptr from the
outset.  This simplifies the code that installs the resulting map into
dwarf2_per_objfile.

Tested by the buildbot.

gdb/ChangeLog
2018-05-19  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (dwarf2_read_debug_names): Use std::unique_ptr.
---
 gdb/ChangeLog    |  4 ++++
 gdb/dwarf2read.c | 17 ++++++++---------
 2 files changed, 12 insertions(+), 9 deletions(-)
  

Comments

Simon Marchi May 20, 2018, 11:49 p.m. UTC | #1
On 2018-05-19 11:23 AM, Tom Tromey wrote:
> This changes dwarf2_read_debug_names to use std::unique_ptr from the
> outset.  This simplifies the code that installs the resulting map into
> dwarf2_per_objfile.

LGTM.

We maybe could add DISABLE_COPY_AND_ASSIGN to mapped_index_base, to ensure
we don't make copies of mapped_index/mapped_debug_names by mistake.

Simon
  

Patch

diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 0690785c5e..9a77502826 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -5603,17 +5603,18 @@  create_cus_from_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile,
 static bool
 dwarf2_read_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile)
 {
-  mapped_debug_names local_map (dwarf2_per_objfile);
+  std::unique_ptr<mapped_debug_names> map
+    (new mapped_debug_names (dwarf2_per_objfile));
   mapped_debug_names dwz_map (dwarf2_per_objfile);
   struct objfile *objfile = dwarf2_per_objfile->objfile;
 
   if (!read_debug_names_from_section (objfile, objfile_name (objfile),
 				      &dwarf2_per_objfile->debug_names,
-				      local_map))
+				      *map))
     return false;
 
   /* Don't use the index if it's empty.  */
-  if (local_map.name_count == 0)
+  if (map->name_count == 0)
     return false;
 
   /* If there is a .dwz file, read it so we can get its CU list as
@@ -5631,9 +5632,9 @@  dwarf2_read_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile)
 	}
     }
 
-  create_cus_from_debug_names (dwarf2_per_objfile, local_map, dwz_map);
+  create_cus_from_debug_names (dwarf2_per_objfile, *map, dwz_map);
 
-  if (local_map.tu_count != 0)
+  if (map->tu_count != 0)
     {
       /* We can only handle a single .debug_types when we have an
 	 index.  */
@@ -5644,15 +5645,13 @@  dwarf2_read_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile)
 						dwarf2_per_objfile->types, 0);
 
       create_signatured_type_table_from_debug_names
-	(dwarf2_per_objfile, local_map, section, &dwarf2_per_objfile->abbrev);
+	(dwarf2_per_objfile, *map, section, &dwarf2_per_objfile->abbrev);
     }
 
   create_addrmap_from_aranges (dwarf2_per_objfile,
 			       &dwarf2_per_objfile->debug_aranges);
 
-  dwarf2_per_objfile->debug_names_table.reset
-    (new mapped_debug_names (dwarf2_per_objfile));
-  *dwarf2_per_objfile->debug_names_table = std::move (local_map);
+  dwarf2_per_objfile->debug_names_table = std::move (map);
   dwarf2_per_objfile->using_index = 1;
   dwarf2_per_objfile->quick_file_names_table =
     create_quick_file_names_table (dwarf2_per_objfile->all_comp_units.size ());