From 6f889f9402b2a9e779636292ff2676a664662e36 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Sat, 11 Oct 2025 00:08:50 -0400 Subject: [PATCH] gdb/linespec: make symbol_to_sal return an optional Return an optional, instead of a bool + the actual value by parameter. I think this makes it a bit easier to understand what's going on. Change-Id: Idf65f4a026cab6eebfb81c4efda406aeb65d0813 Approved-By: Tom Tromey --- gdb/linespec.c | 65 ++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/gdb/linespec.c b/gdb/linespec.c index 975a1feb2c4..fe1fb4c07fb 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -395,8 +395,8 @@ static struct line_offset linespec_parse_variable (struct linespec_state *self, const char *variable); -static bool symbol_to_sal (struct symtab_and_line *result, - bool funfirstline, struct symbol *sym); +static std::optional symbol_to_sal (bool funfirstline, + symbol *sym); static void add_matching_symbols_to_info (const char *name, symbol_name_match_type name_match_type, @@ -2183,16 +2183,15 @@ convert_linespec_to_sals (struct linespec_state *state, linespec *ls) if (!ls->labels.label_symbols.empty ()) { /* We have just a bunch of functions/methods or labels. */ - struct symtab_and_line sal; - for (const auto &sym : ls->labels.label_symbols) { struct program_space *pspace = sym.symbol->symtab ()->compunit ()->objfile ()->pspace (); + std::optional sal + = symbol_to_sal (state->funfirstline, sym.symbol); - if (symbol_to_sal (&sal, state->funfirstline, sym.symbol) - && state->maybe_add_address (pspace, sal.pc)) - add_sal_to_sals (state, sals, sal, + if (sal.has_value () && state->maybe_add_address (pspace, sal->pc)) + add_sal_to_sals (state, sals, *sal, sym.symbol->natural_name (), false); } } @@ -2254,10 +2253,12 @@ convert_linespec_to_sals (struct linespec_state *state, linespec *ls) if (!found_ifunc) { - symtab_and_line sal; - if (symbol_to_sal (&sal, state->funfirstline, sym.symbol) - && state->maybe_add_address (pspace, sal.pc)) - add_sal_to_sals (state, sals, sal, + std::optional sal + = symbol_to_sal (state->funfirstline, sym.symbol); + + if (sal.has_value () + && state->maybe_add_address (pspace, sal->pc)) + add_sal_to_sals (state, sals, *sal, sym.symbol->natural_name (), false); } } @@ -4290,27 +4291,23 @@ add_matching_symbols_to_info (const char *name, /* Now come some functions that are called from multiple places within decode_line_1. */ -static bool -symbol_to_sal (struct symtab_and_line *result, - bool funfirstline, struct symbol *sym) +static std::optional +symbol_to_sal (bool funfirstline, symbol *sym) { if (sym->loc_class () == LOC_BLOCK) - { - *result = find_function_start_sal (sym, funfirstline); - return true; - } + return find_function_start_sal (sym, funfirstline); else { if (sym->loc_class () == LOC_LABEL && sym->value_address () != 0) { - *result = {}; - result->symtab = sym->symtab (); - result->symbol = sym; - result->line = sym->line (); - result->pc = sym->value_address (); - result->pspace = result->symtab->compunit ()->objfile ()->pspace (); - result->explicit_pc = 1; - return true; + symtab_and_line result; + result.symtab = sym->symtab (); + result.symbol = sym; + result.line = sym->line (); + result.pc = sym->value_address (); + result.pspace = result.symtab->compunit ()->objfile ()->pspace (); + result.explicit_pc = 1; + return result; } else if (funfirstline) { @@ -4319,17 +4316,17 @@ symbol_to_sal (struct symtab_and_line *result, else if (sym->line () != 0) { /* We know its line number. */ - *result = {}; - result->symtab = sym->symtab (); - result->symbol = sym; - result->line = sym->line (); - result->pc = sym->value_address (); - result->pspace = result->symtab->compunit ()->objfile ()->pspace (); - return true; + symtab_and_line result; + result.symtab = sym->symtab (); + result.symbol = sym; + result.line = sym->line (); + result.pc = sym->value_address (); + result.pspace = result.symtab->compunit ()->objfile ()->pspace (); + return result; } } - return false; + return std::nullopt; } linespec_result::~linespec_result () -- 2.47.3