gdb: Remove a cleanup from find_overload_match
This patch changes cp-support.c:cp_func_name to return a 'gdb::unique_xmalloc_ptr<char>' instead of a 'char *'. This allows a cleanup to be removed from valops.c:find_overload_match. gdb/ChangeLog: * compile/compile-cplus-types.c (compile_cplus_instance::decl_name): Handle changes to cp_func_name. * cp-support.c (cp_func_name): Update header comment, update return type. * cp-support.h (cp_func_name): Update return type in declaration. * valops.c (find_overload_match): Move temp_func local to top level of function and change its type. Use temp_func to hold and delete temporary string obtained from cp_func_name.
This commit is contained in:
parent
66644cd32b
commit
06d3e5b004
5 changed files with 23 additions and 14 deletions
|
@ -1,3 +1,15 @@
|
||||||
|
2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
|
* compile/compile-cplus-types.c
|
||||||
|
(compile_cplus_instance::decl_name): Handle changes to
|
||||||
|
cp_func_name.
|
||||||
|
* cp-support.c (cp_func_name): Update header comment, update
|
||||||
|
return type.
|
||||||
|
* cp-support.h (cp_func_name): Update return type in declaration.
|
||||||
|
* valops.c (find_overload_match): Move temp_func local to top
|
||||||
|
level of function and change its type. Use temp_func to hold and
|
||||||
|
delete temporary string obtained from cp_func_name.
|
||||||
|
|
||||||
2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com>
|
2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* remote.c (remote_target::remote_check_symbols): Convert `msg` to
|
* remote.c (remote_target::remote_check_symbols): Convert `msg` to
|
||||||
|
|
|
@ -63,9 +63,9 @@ compile_cplus_instance::decl_name (const char *natural)
|
||||||
if (natural == nullptr)
|
if (natural == nullptr)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
char *name = cp_func_name (natural);
|
gdb::unique_xmalloc_ptr<char> name = cp_func_name (natural);
|
||||||
if (name != nullptr)
|
if (name != nullptr)
|
||||||
return gdb::unique_xmalloc_ptr<char> (name);
|
return name;
|
||||||
|
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (natural));
|
return gdb::unique_xmalloc_ptr<char> (xstrdup (natural));
|
||||||
}
|
}
|
||||||
|
|
|
@ -808,10 +808,9 @@ method_name_from_physname (const char *physname)
|
||||||
/* If FULL_NAME is the demangled name of a C++ function (including an
|
/* If FULL_NAME is the demangled name of a C++ function (including an
|
||||||
arg list, possibly including namespace/class qualifications),
|
arg list, possibly including namespace/class qualifications),
|
||||||
return a new string containing only the function name (without the
|
return a new string containing only the function name (without the
|
||||||
arg list/class qualifications). Otherwise, return NULL. The
|
arg list/class qualifications). Otherwise, return NULL. */
|
||||||
caller is responsible for freeing the memory in question. */
|
|
||||||
|
|
||||||
char *
|
gdb::unique_xmalloc_ptr<char>
|
||||||
cp_func_name (const char *full_name)
|
cp_func_name (const char *full_name)
|
||||||
{
|
{
|
||||||
gdb::unique_xmalloc_ptr<char> ret;
|
gdb::unique_xmalloc_ptr<char> ret;
|
||||||
|
@ -820,14 +819,14 @@ cp_func_name (const char *full_name)
|
||||||
|
|
||||||
info = cp_demangled_name_to_comp (full_name, NULL);
|
info = cp_demangled_name_to_comp (full_name, NULL);
|
||||||
if (!info)
|
if (!info)
|
||||||
return NULL;
|
return nullptr;
|
||||||
|
|
||||||
ret_comp = unqualified_name_from_comp (info->tree);
|
ret_comp = unqualified_name_from_comp (info->tree);
|
||||||
|
|
||||||
if (ret_comp != NULL)
|
if (ret_comp != NULL)
|
||||||
ret = cp_comp_to_string (ret_comp, 10);
|
ret = cp_comp_to_string (ret_comp, 10);
|
||||||
|
|
||||||
return ret.release ();
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helper for cp_remove_params. DEMANGLED_NAME is the name of a
|
/* Helper for cp_remove_params. DEMANGLED_NAME is the name of a
|
||||||
|
|
|
@ -96,7 +96,7 @@ extern unsigned int cp_find_first_component (const char *name);
|
||||||
|
|
||||||
extern unsigned int cp_entire_prefix_len (const char *name);
|
extern unsigned int cp_entire_prefix_len (const char *name);
|
||||||
|
|
||||||
extern char *cp_func_name (const char *full_name);
|
extern gdb::unique_xmalloc_ptr<char> cp_func_name (const char *full_name);
|
||||||
|
|
||||||
extern gdb::unique_xmalloc_ptr<char> cp_remove_params
|
extern gdb::unique_xmalloc_ptr<char> cp_remove_params
|
||||||
(const char *demanged_name);
|
(const char *demanged_name);
|
||||||
|
|
10
gdb/valops.c
10
gdb/valops.c
|
@ -2520,6 +2520,7 @@ find_overload_match (gdb::array_view<value *> args,
|
||||||
|
|
||||||
const char *obj_type_name = NULL;
|
const char *obj_type_name = NULL;
|
||||||
const char *func_name = NULL;
|
const char *func_name = NULL;
|
||||||
|
gdb::unique_xmalloc_ptr<char> temp_func;
|
||||||
enum oload_classification match_quality;
|
enum oload_classification match_quality;
|
||||||
enum oload_classification method_match_quality = INCOMPATIBLE;
|
enum oload_classification method_match_quality = INCOMPATIBLE;
|
||||||
enum oload_classification src_method_match_quality = INCOMPATIBLE;
|
enum oload_classification src_method_match_quality = INCOMPATIBLE;
|
||||||
|
@ -2666,20 +2667,17 @@ find_overload_match (gdb::array_view<value *> args,
|
||||||
&& TYPE_CODE (check_typedef (SYMBOL_TYPE (fsym)))
|
&& TYPE_CODE (check_typedef (SYMBOL_TYPE (fsym)))
|
||||||
== TYPE_CODE_FUNC)
|
== TYPE_CODE_FUNC)
|
||||||
{
|
{
|
||||||
char *temp_func;
|
|
||||||
|
|
||||||
temp_func = cp_func_name (qualified_name);
|
temp_func = cp_func_name (qualified_name);
|
||||||
|
|
||||||
/* If cp_func_name did not remove anything, the name of the
|
/* If cp_func_name did not remove anything, the name of the
|
||||||
symbol did not include scope or argument types - it was
|
symbol did not include scope or argument types - it was
|
||||||
probably a C-style function. */
|
probably a C-style function. */
|
||||||
if (temp_func)
|
if (temp_func != nullptr)
|
||||||
{
|
{
|
||||||
make_cleanup (xfree, temp_func);
|
if (strcmp (temp_func.get (), qualified_name) == 0)
|
||||||
if (strcmp (temp_func, qualified_name) == 0)
|
|
||||||
func_name = NULL;
|
func_name = NULL;
|
||||||
else
|
else
|
||||||
func_name = temp_func;
|
func_name = temp_func.get ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue