From 5ae8852d26a835715889b0ccad75d5d18572d302 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 23 May 2024 09:21:09 -0600 Subject: Examine template symbols in lookup_local_symbol This changes lookup_local_symbol to directly examine any attached template symbols, rather than gating this lookup on the use of C++ or Fortran. As mentioned in an earlier patch, these objects are not necessarily C++-specific, and doing the search generically seems better. This also renames cp_lookup_symbol_imports_or_template now that the "template" part has been removed. --- gdb/cp-namespace.c | 37 ++++++++----------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) (limited to 'gdb/cp-namespace.c') diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c index e5ef54d..89c1bbd 100644 --- a/gdb/cp-namespace.c +++ b/gdb/cp-namespace.c @@ -539,44 +539,23 @@ cp_lookup_symbol_via_imports (const char *scope, return {}; } -/* Search for symbols whose name match NAME in the given SCOPE. - if BLOCK is a function, we'll search first through the template - parameters and function type. Afterwards (or if BLOCK is not a function) - search through imported directives using cp_lookup_symbol_via_imports. */ +/* Search for symbols whose name match NAME in the given SCOPE. */ struct block_symbol -cp_lookup_symbol_imports_or_template (const char *scope, - const char *name, - const struct block *block, - const domain_search_flags domain) +cp_lookup_symbol_imports (const char *scope, + const char *name, + const struct block *block, + const domain_search_flags domain) { struct symbol *function = block->function (); symbol_lookup_debug_printf - ("cp_lookup_symbol_imports_or_template (%s, %s, %s, %s)", + ("cp_lookup_symbol_imports (%s, %s, %s, %s)", scope, name, host_address_to_string (block), domain_name (domain).c_str ()); if (function != NULL && function->language () == language_cplus) { - /* Search the function's template parameters. */ - if (function->is_template_function ()) - { - struct template_symbol *templ - = (struct template_symbol *) function; - struct symbol *sym = search_symbol_list (name, - templ->n_template_arguments, - templ->template_arguments); - - if (sym != NULL) - { - symbol_lookup_debug_printf - ("cp_lookup_symbol_imports_or_template (...) = %s", - host_address_to_string (sym)); - return (struct block_symbol) {sym, block}; - } - } - /* Search the template parameters of the function's defining context. */ if (function->natural_name ()) @@ -612,7 +591,7 @@ cp_lookup_symbol_imports_or_template (const char *scope, if (sym != NULL) { symbol_lookup_debug_printf - ("cp_lookup_symbol_imports_or_template (...) = %s", + ("cp_lookup_symbol_imports (...) = %s", host_address_to_string (sym)); return (struct block_symbol) {sym, parent}; } @@ -622,7 +601,7 @@ cp_lookup_symbol_imports_or_template (const char *scope, struct block_symbol result = cp_lookup_symbol_via_imports (scope, name, block, domain, 1, 1); - symbol_lookup_debug_printf ("cp_lookup_symbol_imports_or_template (...) = %s\n", + symbol_lookup_debug_printf ("cp_lookup_symbol_imports (...) = %s\n", result.symbol != nullptr ? host_address_to_string (result.symbol) : "NULL"); return result; -- cgit v1.1