public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/2] More use of checked_static_cast
@ 2022-09-25 21:11 Tom Tromey
  2022-09-25 21:11 ` [PATCH 1/2] Use checked_static_cast in more places Tom Tromey
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Tom Tromey @ 2022-09-25 21:11 UTC (permalink / raw)
  To: gdb-patches

I noticed a few more spots that could use checked_static_cast, and
this short series is the result.

Regression tested on x86-64 Fedora 34.

Tom



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] Use checked_static_cast in more places
  2022-09-25 21:11 [PATCH 0/2] More use of checked_static_cast Tom Tromey
@ 2022-09-25 21:11 ` Tom Tromey
  2022-09-25 21:11 ` [PATCH 2/2] More uses of checked_static_cast Tom Tromey
  2022-10-16 18:16 ` [PATCH 0/2] More use " Tom Tromey
  2 siblings, 0 replies; 4+ messages in thread
From: Tom Tromey @ 2022-09-25 21:11 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

I looked through all the uses of static_cast<... *> in gdb and
converted many of them to checked_static_cast.

I couldn't test a few of these changes.
---
 gdb/aix-thread.c             |  2 +-
 gdb/breakpoint.c             |  9 +++++----
 gdb/darwin-nat.h             |  4 ++--
 gdb/dwarf2/read.c            | 14 +++++++-------
 gdb/linux-thread-db.c        |  2 +-
 gdb/location.c               | 10 +++++-----
 gdb/nto-tdep.h               |  3 ++-
 gdb/process-stratum-target.h |  3 ++-
 gdb/remote.c                 |  4 ++--
 9 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c
index 57e5756e144..e556c153576 100644
--- a/gdb/aix-thread.c
+++ b/gdb/aix-thread.c
@@ -90,7 +90,7 @@ struct aix_thread_info : public private_thread_info
 static aix_thread_info *
 get_aix_thread_info (thread_info *thread)
 {
-  return static_cast<aix_thread_info *> (thread->priv.get ());
+  return gdb::checked_static_cast<aix_thread_info *> (thread->priv.get ());
 }
 
 /* Information about a thread of which libpthdebug is aware.  */
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 002f4a935b1..cbe7b340782 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -999,7 +999,7 @@ set_breakpoint_condition (struct breakpoint *b, const char *exp,
       b->cond_string.reset ();
 
       if (is_watchpoint (b))
-	static_cast<watchpoint *> (b)->cond_exp.reset ();
+	gdb::checked_static_cast<watchpoint *> (b)->cond_exp.reset ();
       else
 	{
 	  int loc_num = 1;
@@ -1031,7 +1031,7 @@ set_breakpoint_condition (struct breakpoint *b, const char *exp,
 	  expression_up new_exp = parse_exp_1 (&arg, 0, 0, 0, &tracker);
 	  if (*arg != 0)
 	    error (_("Junk at end of expression"));
-	  watchpoint *w = static_cast<watchpoint *> (b);
+	  watchpoint *w = gdb::checked_static_cast<watchpoint *> (b);
 	  w->cond_exp = std::move (new_exp);
 	  w->cond_exp_valid_block = tracker.block ();
 	}
@@ -8299,7 +8299,7 @@ code_breakpoint::code_breakpoint (struct gdbarch *gdbarch_,
   if (type == bp_static_tracepoint
       || type == bp_static_marker_tracepoint)
     {
-      auto *t = static_cast<struct tracepoint *> (this);
+      auto *t = gdb::checked_static_cast<struct tracepoint *> (this);
       struct static_tracepoint_marker marker;
 
       if (strace_marker_p (this))
@@ -13501,7 +13501,8 @@ insert_single_step_breakpoint (struct gdbarch *gdbarch,
   sal.explicit_pc = 1;
 
   auto *ss_bp
-    = static_cast<momentary_breakpoint *> (tp->control.single_step_breakpoints);
+    = (gdb::checked_static_cast<momentary_breakpoint *>
+       (tp->control.single_step_breakpoints));
   ss_bp->add_location (sal);
 
   update_global_location_list (UGLL_INSERT);
diff --git a/gdb/darwin-nat.h b/gdb/darwin-nat.h
index e3dcd963706..f8a14981aee 100644
--- a/gdb/darwin-nat.h
+++ b/gdb/darwin-nat.h
@@ -154,7 +154,7 @@ struct darwin_exception_info
 static inline darwin_thread_info *
 get_darwin_thread_info (class thread_info *thread)
 {
-  return static_cast<darwin_thread_info *> (thread->priv.get ());
+  return gdb::checked_static_cast<darwin_thread_info *> (thread->priv.get ());
 }
 
 /* Describe an inferior.  */
@@ -188,7 +188,7 @@ struct darwin_inferior : public private_inferior
 static inline darwin_inferior *
 get_darwin_inferior (inferior *inf)
 {
-  return static_cast<darwin_inferior *> (inf->priv.get ());
+  return gdb::checked_static_cast<darwin_inferior *> (inf->priv.get ());
 }
 
 /* Exception port.  */
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 35cce9396ae..d34ba69c373 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -3102,7 +3102,7 @@ dwarf2_gdb_index::dump (struct objfile *objfile)
 {
   dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
 
-  mapped_index *index = (static_cast<mapped_index *>
+  mapped_index *index = (gdb::checked_static_cast<mapped_index *>
 			 (per_objfile->per_bfd->index_table.get ()));
   gdb_printf (".gdb_index: version %d\n", index->version);
   gdb_printf ("\n");
@@ -18564,11 +18564,11 @@ dwarf2_per_cu_data *
 cooked_index_functions::find_per_cu (dwarf2_per_bfd *per_bfd,
 				     CORE_ADDR adjusted_pc)
 {
+  if (per_bfd->index_table == nullptr)
+    return nullptr;
   cooked_index_vector *table
-    = (static_cast<cooked_index_vector *>
+    = (gdb::checked_static_cast<cooked_index_vector *>
        (per_bfd->index_table.get ()));
-  if (table == nullptr)
-    return nullptr;
   return table->lookup (adjusted_pc);
 }
 
@@ -18585,7 +18585,7 @@ cooked_index_functions::find_compunit_symtab_by_address
 
   CORE_ADDR baseaddr = objfile->data_section_offset ();
   cooked_index_vector *table
-    = (static_cast<cooked_index_vector *>
+    = (gdb::checked_static_cast<cooked_index_vector *>
        (per_objfile->per_bfd->index_table.get ()));
   dwarf2_per_cu_data *per_cu = table->lookup (address - baseaddr);
   if (per_cu == nullptr)
@@ -18613,7 +18613,7 @@ cooked_index_functions::expand_matching_symbols
     = lang->get_symbol_name_matcher (lookup_name);
 
   cooked_index_vector *table
-    = (static_cast<cooked_index_vector *>
+    = (gdb::checked_static_cast<cooked_index_vector *>
        (per_objfile->per_bfd->index_table.get ()));
   for (const cooked_index_entry *entry : table->all_entries ())
     {
@@ -18645,7 +18645,7 @@ cooked_index_functions::expand_symtabs_matching
     return true;
 
   cooked_index_vector *table
-    = (static_cast<cooked_index_vector *>
+    = (gdb::checked_static_cast<cooked_index_vector *>
        (per_objfile->per_bfd->index_table.get ()));
   table->wait ();
 
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index 11da82a1abc..839271c01c5 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -317,7 +317,7 @@ struct thread_db_thread_info : public private_thread_info
 static thread_db_thread_info *
 get_thread_db_thread_info (thread_info *thread)
 {
-  return static_cast<thread_db_thread_info *> (thread->priv.get ());
+  return gdb::checked_static_cast<thread_db_thread_info *> (thread->priv.get ());
 }
 
 static const char *
diff --git a/gdb/location.c b/gdb/location.c
index e4863fdefce..ba86b7c48f7 100644
--- a/gdb/location.c
+++ b/gdb/location.c
@@ -221,7 +221,7 @@ const linespec_location_spec *
 as_linespec_location_spec (const location_spec *locspec)
 {
   gdb_assert (locspec->type () == LINESPEC_LOCATION_SPEC);
-  return static_cast<const linespec_location_spec *> (locspec);
+  return gdb::checked_static_cast<const linespec_location_spec *> (locspec);
 }
 
 /* See description in location.h.  */
@@ -240,7 +240,7 @@ const address_location_spec *
 as_address_location_spec (const location_spec *locspec)
 {
   gdb_assert (locspec->type () == ADDRESS_LOCATION_SPEC);
-  return static_cast<const address_location_spec *> (locspec);
+  return gdb::checked_static_cast<const address_location_spec *> (locspec);
 }
 
 /* See description in location.h.  */
@@ -257,7 +257,7 @@ const probe_location_spec *
 as_probe_location_spec (const location_spec *locspec)
 {
   gdb_assert (locspec->type () == PROBE_LOCATION_SPEC);
-  return static_cast<const probe_location_spec *> (locspec);
+  return gdb::checked_static_cast<const probe_location_spec *> (locspec);
 }
 
 /* See description in location.h.  */
@@ -266,7 +266,7 @@ const explicit_location_spec *
 as_explicit_location_spec (const location_spec *locspec)
 {
   gdb_assert (locspec->type () == EXPLICIT_LOCATION_SPEC);
-  return static_cast<const explicit_location_spec *> (locspec);
+  return gdb::checked_static_cast<const explicit_location_spec *> (locspec);
 }
 
 /* See description in location.h.  */
@@ -275,7 +275,7 @@ explicit_location_spec *
 as_explicit_location_spec (location_spec *locspec)
 {
   gdb_assert (locspec->type () == EXPLICIT_LOCATION_SPEC);
-  return static_cast<explicit_location_spec *> (locspec);
+  return gdb::checked_static_cast<explicit_location_spec *> (locspec);
 }
 
 /* Return a string representation of the explicit location spec in
diff --git a/gdb/nto-tdep.h b/gdb/nto-tdep.h
index f176b70df27..e97eee0708b 100644
--- a/gdb/nto-tdep.h
+++ b/gdb/nto-tdep.h
@@ -26,6 +26,7 @@
 #include "osabi.h"
 #include "regset.h"
 #include "gdbthread.h"
+#include "gdbsupport/gdb-checked-static-cast.h"
 
 /* Target operations defined for Neutrino targets (<target>-nto-tdep.c).  */
 
@@ -145,7 +146,7 @@ struct nto_thread_info : public private_thread_info
 static inline nto_thread_info *
 get_nto_thread_info (thread_info *thread)
 {
-  return static_cast<nto_thread_info *> (thread->priv.get ());
+  return gdb::checked_static_cast<nto_thread_info *> (thread->priv.get ());
 }
 
 /* Per-inferior data, common for both procfs and remote.  */
diff --git a/gdb/process-stratum-target.h b/gdb/process-stratum-target.h
index bb8e39f53a3..62f56166f5e 100644
--- a/gdb/process-stratum-target.h
+++ b/gdb/process-stratum-target.h
@@ -23,6 +23,7 @@
 #include "target.h"
 #include <set>
 #include "gdbsupport/intrusive_list.h"
+#include "gdbsupport/gdb-checked-static-cast.h"
 #include "gdbthread.h"
 
 /* Abstract base class inherited by all process_stratum targets.  */
@@ -160,7 +161,7 @@ static inline process_stratum_target *
 as_process_stratum_target (target_ops *target)
 {
   gdb_assert (target->stratum () == process_stratum);
-  return static_cast<process_stratum_target *> (target);
+  return gdb::checked_static_cast<process_stratum_target *> (target);
 }
 
 /* Return a collection of targets that have non-exited inferiors.  */
diff --git a/gdb/remote.c b/gdb/remote.c
index 2f6cb2d01ee..17c2d17c8fe 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -2694,7 +2694,7 @@ get_remote_thread_info (thread_info *thread)
   if (thread->priv == NULL)
     thread->priv.reset (new remote_thread_info);
 
-  return static_cast<remote_thread_info *> (thread->priv.get ());
+  return gdb::checked_static_cast<remote_thread_info *> (thread->priv.get ());
 }
 
 /* Return PTID's private thread data, creating it if necessary.  */
@@ -6611,7 +6611,7 @@ get_remote_inferior (inferior *inf)
   if (inf->priv == NULL)
     inf->priv.reset (new remote_inferior);
 
-  return static_cast<remote_inferior *> (inf->priv.get ());
+  return gdb::checked_static_cast<remote_inferior *> (inf->priv.get ());
 }
 
 /* Class used to track the construction of a vCont packet in the
-- 
2.34.3


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/2] More uses of checked_static_cast
  2022-09-25 21:11 [PATCH 0/2] More use of checked_static_cast Tom Tromey
  2022-09-25 21:11 ` [PATCH 1/2] Use checked_static_cast in more places Tom Tromey
@ 2022-09-25 21:11 ` Tom Tromey
  2022-10-16 18:16 ` [PATCH 0/2] More use " Tom Tromey
  2 siblings, 0 replies; 4+ messages in thread
From: Tom Tromey @ 2022-09-25 21:11 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

This patch changes a few more uses of static_cast to use
checked_static_cast.  In this patch, cast-to-references are converted
by moving the dereference outside of the cast, as checked_static_cast
only handles pointers.
---
 gdb/dwarf2/read.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index d34ba69c373..c2b40bff976 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -3155,8 +3155,8 @@ dwarf2_gdb_index::expand_matching_symbols
   const block_enum block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
 
   mapped_index &index
-    = (static_cast<mapped_index &>
-       (*per_objfile->per_bfd->index_table.get ()));
+    = *(gdb::checked_static_cast<mapped_index *>
+	(per_objfile->per_bfd->index_table.get ()));
 
   const char *match_name = name.ada ().lookup_name ().c_str ();
   auto matcher = [&] (const char *symname)
@@ -4005,8 +4005,8 @@ dw2_expand_marked_cus
   offset_type vec_len, vec_idx;
   bool global_seen = false;
   mapped_index &index
-    = (static_cast<mapped_index &>
-       (*per_objfile->per_bfd->index_table.get ()));
+    = *(gdb::checked_static_cast<mapped_index *>
+	(per_objfile->per_bfd->index_table.get ()));
 
   offset_view vec (index.constant_pool.slice (index.symbol_vec_index (idx)));
   vec_len = vec[0];
@@ -4225,8 +4225,8 @@ dwarf2_gdb_index::expand_symtabs_matching
     }
 
   mapped_index &index
-    = (static_cast<mapped_index &>
-       (*per_objfile->per_bfd->index_table.get ()));
+    = *(gdb::checked_static_cast<mapped_index *>
+	(per_objfile->per_bfd->index_table.get ()));
 
   bool result
     = dw2_expand_symtabs_matching_symbol (index, *lookup_name,
@@ -5208,8 +5208,8 @@ dwarf2_debug_names_index::expand_matching_symbols
   dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
 
   mapped_debug_names &map
-    = (static_cast<mapped_debug_names &>
-       (*per_objfile->per_bfd->index_table.get ()));
+    = *(gdb::checked_static_cast<mapped_debug_names *>
+	(per_objfile->per_bfd->index_table.get ()));
   const block_search_flags block_flags
     = global ? SEARCH_GLOBAL_BLOCK : SEARCH_STATIC_BLOCK;
 
@@ -5270,8 +5270,8 @@ dwarf2_debug_names_index::expand_symtabs_matching
     }
 
   mapped_debug_names &map
-    = (static_cast<mapped_debug_names &>
-       (*per_objfile->per_bfd->index_table.get ()));
+    = *(gdb::checked_static_cast<mapped_debug_names *>
+	(per_objfile->per_bfd->index_table.get ()));
 
   bool result
     = dw2_expand_symtabs_matching_symbol (map, *lookup_name,
-- 
2.34.3


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] More use of checked_static_cast
  2022-09-25 21:11 [PATCH 0/2] More use of checked_static_cast Tom Tromey
  2022-09-25 21:11 ` [PATCH 1/2] Use checked_static_cast in more places Tom Tromey
  2022-09-25 21:11 ` [PATCH 2/2] More uses of checked_static_cast Tom Tromey
@ 2022-10-16 18:16 ` Tom Tromey
  2 siblings, 0 replies; 4+ messages in thread
From: Tom Tromey @ 2022-10-16 18:16 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

>>>>> "Tom" == Tom Tromey <tom@tromey.com> writes:

Tom> I noticed a few more spots that could use checked_static_cast, and
Tom> this short series is the result.

Tom> Regression tested on x86-64 Fedora 34.

I'm checking this in now.

Tom

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-10-16 18:16 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-25 21:11 [PATCH 0/2] More use of checked_static_cast Tom Tromey
2022-09-25 21:11 ` [PATCH 1/2] Use checked_static_cast in more places Tom Tromey
2022-09-25 21:11 ` [PATCH 2/2] More uses of checked_static_cast Tom Tromey
2022-10-16 18:16 ` [PATCH 0/2] More use " Tom Tromey

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).