Use checked_static_cast in more places
authorTom Tromey <tromey@adacore.com>
Wed, 17 Aug 2022 17:47:17 +0000 (11:47 -0600)
committerTom Tromey <tromey@adacore.com>
Mon, 12 Sep 2022 20:25:06 +0000 (14:25 -0600)
I went through all the uses of dynamic_cast<> in gdb, looking for ones
that could be replaced with checked_static_cast.  This patch is the
result.  Regression tested on x86-64 Fedora 34.

gdb/ada-exp.y
gdb/ax-gdb.c
gdb/disasm.c
gdb/location.c
gdb/mi/mi-out.c
gdb/tracepoint.c
gdb/tui/tui-io.c

index 8660205809a23a386a8dd39536d10f09a15f53c6..78aec4e920b578bb092f5d2c0165c373b09f1587 100644 (file)
@@ -342,9 +342,7 @@ static ada_choices_component *
 choice_component ()
 {
   ada_component *last = components.back ().get ();
-  ada_choices_component *result = dynamic_cast<ada_choices_component *> (last);
-  gdb_assert (result != nullptr);
-  return result;
+  return gdb::checked_static_cast<ada_choices_component *> (last);
 }
 
 /* Pop the most recent component from the global stack, and return
index 1fccfde559e2dfcbfceb320e5052bcb15c654a74..0d2566f1518b69979790b0315b72e8ac196a886c 100644 (file)
@@ -1920,8 +1920,7 @@ assign_operation::do_generate_ax (struct expression *exp,
     error (_("May only assign to trace state variables"));
 
   internalvar_operation *ivarop
-    = dynamic_cast<internalvar_operation *> (subop);
-  gdb_assert (ivarop != nullptr);
+    = gdb::checked_static_cast<internalvar_operation *> (subop);
 
   const char *name = internalvar_name (ivarop->get_internalvar ());
   struct trace_state_variable *tsv;
@@ -1950,8 +1949,7 @@ assign_modify_operation::do_generate_ax (struct expression *exp,
     error (_("May only assign to trace state variables"));
 
   internalvar_operation *ivarop
-    = dynamic_cast<internalvar_operation *> (subop);
-  gdb_assert (ivarop != nullptr);
+    = gdb::checked_static_cast<internalvar_operation *> (subop);
 
   const char *name = internalvar_name (ivarop->get_internalvar ());
   struct trace_state_variable *tsv;
index fe4eed2d524e33500dff62184eb5b9720bafdae0..989120e05b18998cf7e923af340c34958a12f8af 100644 (file)
@@ -246,8 +246,7 @@ gdb_printing_disassembler::stream_from_gdb_disassemble_info (void *dis_info)
 {
   gdb_disassemble_info *di = (gdb_disassemble_info *) dis_info;
   gdb_printing_disassembler *dis
-    = dynamic_cast<gdb_printing_disassembler *> (di);
-  gdb_assert (dis != nullptr);
+    = gdb::checked_static_cast<gdb_printing_disassembler *> (di);
   ui_file *stream = dis->stream ();
   gdb_assert (stream != nullptr);
   return stream;
index 2b31baa4c8522097841beeddb743e164f97ca12e..e4863fdefcea988252b33a71b235b16515ec2824 100644 (file)
@@ -18,6 +18,7 @@
 
 #include "defs.h"
 #include "gdbsupport/gdb_assert.h"
+#include "gdbsupport/gdb-checked-static-cast.h"
 #include "location.h"
 #include "symtab.h"
 #include "language.h"
@@ -848,8 +849,7 @@ string_to_location_spec (const char **stringp,
         linespec parsing below and discard the explicit location
         spec.  */
       explicit_location_spec *xloc
-       = dynamic_cast<explicit_location_spec *> (locspec.get ());
-      gdb_assert (xloc != nullptr);
+       = gdb::checked_static_cast<explicit_location_spec *> (locspec.get ());
       match_type = xloc->func_name_match_type;
     }
 
index eedc5f70549cab84320fc19ebe9fc8d14ff68966..96a847eb6b6961eb2f5bfbfb89d2fe7fff81ed05 100644 (file)
@@ -27,6 +27,7 @@
 #include "interps.h"
 #include "ui-out.h"
 #include "utils.h"
+#include "gdbsupport/gdb-checked-static-cast.h"
 
 /* Mark beginning of a table.  */
 
@@ -327,11 +328,7 @@ mi_out_new (const char *mi_version)
 static mi_ui_out *
 as_mi_ui_out (ui_out *uiout)
 {
-  mi_ui_out *mi_uiout = dynamic_cast<mi_ui_out *> (uiout);
-
-  gdb_assert (mi_uiout != NULL);
-
-  return mi_uiout;
+  return gdb::checked_static_cast<mi_ui_out *> (uiout);
 }
 
 int
index 75ac0cef3b041eac9edb8d4034da3e150fe4bff9..dfb62dcf62c5a1657614c70fc4982ad2408a60c4 100644 (file)
@@ -687,7 +687,7 @@ validate_actionline (const char *line, struct breakpoint *b)
                {
                  symbol *sym;
                  expr::var_value_operation *vvop
-                   = (dynamic_cast<expr::var_value_operation *>
+                   = (gdb::checked_static_cast<expr::var_value_operation *>
                       (exp->op.get ()));
                  sym = vvop->get_symbol ();
 
@@ -1357,7 +1357,7 @@ encode_actions_1 (struct command_line *action,
                    case OP_REGISTER:
                      {
                        expr::register_operation *regop
-                         = (dynamic_cast<expr::register_operation *>
+                         = (gdb::checked_static_cast<expr::register_operation *>
                             (exp->op.get ()));
                        const char *name = regop->get_name ();
 
@@ -1380,7 +1380,7 @@ encode_actions_1 (struct command_line *action,
                        tempval = evaluate_expression (exp.get ());
                        addr = value_address (tempval);
                        expr::unop_memval_operation *memop
-                         = (dynamic_cast<expr::unop_memval_operation *>
+                         = (gdb::checked_static_cast<expr::unop_memval_operation *>
                             (exp->op.get ()));
                        struct type *type = memop->get_type ();
                        /* Initialize the TYPE_LENGTH if it is a typedef.  */
@@ -1397,7 +1397,7 @@ encode_actions_1 (struct command_line *action,
                    case OP_VAR_VALUE:
                      {
                        expr::var_value_operation *vvo
-                         = (dynamic_cast<expr::var_value_operation *>
+                         = (gdb::checked_static_cast<expr::var_value_operation *>
                             (exp->op.get ()));
                        struct symbol *sym = vvo->get_symbol ();
                        const char *name = sym->natural_name ();
index 0efaf69335ce00bde46dba75693eea02983f4ee0..a30000ef626b3be69a55360fe1cd774c6c3bf289 100644 (file)
@@ -45,6 +45,7 @@
 #include "gdb_curses.h"
 #include <map>
 #include "pager.h"
+#include "gdbsupport/gdb-checked-static-cast.h"
 
 /* This redefines CTRL if it is not already defined, so it must come
    after terminal state releated include files like <term.h> and
@@ -832,8 +833,7 @@ tui_setup_io (int mode)
       tui_old_stdout = gdb_stdout;
       tui_old_stderr = gdb_stderr;
       tui_old_stdlog = gdb_stdlog;
-      tui_old_uiout = dynamic_cast<cli_ui_out *> (current_uiout);
-      gdb_assert (tui_old_uiout != nullptr);
+      tui_old_uiout = gdb::checked_static_cast<cli_ui_out *> (current_uiout);
 
       /* Reconfigure gdb output.  */
       gdb_stdout = tui_stdout;