mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-31 01:45:52 +08:00
Fix regression in Ada do_full_match
An earlier patch to ada-lang.c:do_full_match introduced a subtle change to the semantics. The previous code did: - if (strncmp (sym_name, search_name, search_name_len) == 0 - && is_name_suffix (sym_name + search_name_len)) - return true; - - if (startswith (sym_name, "_ada_") whereas the new code unconditionally skips a leading "_ada_". The difference occurs if the lookup name itself starts with "_ada_". In this case, the symbol won't match. Normally this doesn't seem to be a problem. However, it caused a regression on one particular (internal) test case on one particular platform. This patch changes the code to handle this case. I don't know how to write a reliable test case for this, so no test is included. 2021-01-07 Tom Tromey <tromey@adacore.com> * ada-lang.c (do_full_match): Conditionally skip "_ada_" prefix.
This commit is contained in:
@ -13572,10 +13572,16 @@ do_full_match (const char *symbol_search_name,
|
||||
const lookup_name_info &lookup_name,
|
||||
completion_match_result *comp_match_res)
|
||||
{
|
||||
if (startswith (symbol_search_name, "_ada_"))
|
||||
const char *lname = lookup_name.ada ().lookup_name ().c_str ();
|
||||
|
||||
/* If both symbols start with "_ada_", just let the loop below
|
||||
handle the comparison. However, if only the symbol name starts
|
||||
with "_ada_", skip the prefix and let the match proceed as
|
||||
usual. */
|
||||
if (startswith (symbol_search_name, "_ada_")
|
||||
&& !startswith (lname, "_ada"))
|
||||
symbol_search_name += 5;
|
||||
|
||||
const char *lname = lookup_name.ada ().lookup_name ().c_str ();
|
||||
int uscore_count = 0;
|
||||
while (*lname != '\0')
|
||||
{
|
||||
|
Reference in New Issue
Block a user