From 5f48d886a9ce0b7d109a26c860adf66330ca65cf Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 17 Aug 2022 11:47:17 -0600 Subject: Use checked_static_cast in more places 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 | 4 +--- gdb/ax-gdb.c | 6 ++---- gdb/disasm.c | 3 +-- gdb/location.c | 4 ++-- gdb/mi/mi-out.c | 7 ++----- gdb/tracepoint.c | 8 ++++---- gdb/tui/tui-io.c | 4 ++-- 7 files changed, 14 insertions(+), 22 deletions(-) (limited to 'gdb') diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y index 8660205..78aec4e 100644 --- a/gdb/ada-exp.y +++ b/gdb/ada-exp.y @@ -342,9 +342,7 @@ static ada_choices_component * choice_component () { ada_component *last = components.back ().get (); - ada_choices_component *result = dynamic_cast (last); - gdb_assert (result != nullptr); - return result; + return gdb::checked_static_cast (last); } /* Pop the most recent component from the global stack, and return diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c index 1fccfde..0d2566f 100644 --- a/gdb/ax-gdb.c +++ b/gdb/ax-gdb.c @@ -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 (subop); - gdb_assert (ivarop != nullptr); + = gdb::checked_static_cast (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 (subop); - gdb_assert (ivarop != nullptr); + = gdb::checked_static_cast (subop); const char *name = internalvar_name (ivarop->get_internalvar ()); struct trace_state_variable *tsv; diff --git a/gdb/disasm.c b/gdb/disasm.c index fe4eed2..989120e 100644 --- a/gdb/disasm.c +++ b/gdb/disasm.c @@ -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 (di); - gdb_assert (dis != nullptr); + = gdb::checked_static_cast (di); ui_file *stream = dis->stream (); gdb_assert (stream != nullptr); return stream; diff --git a/gdb/location.c b/gdb/location.c index 2b31baa..e4863fd 100644 --- a/gdb/location.c +++ b/gdb/location.c @@ -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 (locspec.get ()); - gdb_assert (xloc != nullptr); + = gdb::checked_static_cast (locspec.get ()); match_type = xloc->func_name_match_type; } diff --git a/gdb/mi/mi-out.c b/gdb/mi/mi-out.c index eedc5f7..96a847e 100644 --- a/gdb/mi/mi-out.c +++ b/gdb/mi/mi-out.c @@ -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 (uiout); - - gdb_assert (mi_uiout != NULL); - - return mi_uiout; + return gdb::checked_static_cast (uiout); } int diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 75ac0ce..dfb62dc 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -687,7 +687,7 @@ validate_actionline (const char *line, struct breakpoint *b) { symbol *sym; expr::var_value_operation *vvop - = (dynamic_cast + = (gdb::checked_static_cast (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 + = (gdb::checked_static_cast (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 + = (gdb::checked_static_cast (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 + = (gdb::checked_static_cast (exp->op.get ())); struct symbol *sym = vvo->get_symbol (); const char *name = sym->natural_name (); diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c index 0efaf69..a30000e 100644 --- a/gdb/tui/tui-io.c +++ b/gdb/tui/tui-io.c @@ -45,6 +45,7 @@ #include "gdb_curses.h" #include #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 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 (current_uiout); - gdb_assert (tui_old_uiout != nullptr); + tui_old_uiout = gdb::checked_static_cast (current_uiout); /* Reconfigure gdb output. */ gdb_stdout = tui_stdout; -- cgit v1.1