gdb: Remove a cleanup from find_overload_match
authorAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 31 Dec 2018 17:41:38 +0000 (17:41 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Thu, 3 Jan 2019 21:24:00 +0000 (21:24 +0000)
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.

gdb/ChangeLog
gdb/compile/compile-cplus-types.c
gdb/cp-support.c
gdb/cp-support.h
gdb/valops.c

index 48500824cd15bfc367e4425b89f6da3da1b9beb1..3e677dcde2bbcda88121a9c8c1f4553d069e64a1 100644 (file)
@@ -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>
 
        * remote.c (remote_target::remote_check_symbols): Convert `msg` to
index 3de0d8eee8c2753ad49ccc4caabad7d987c6eb20..910a874550d519af6e7c65cff0076a2eca52d009 100644 (file)
@@ -63,9 +63,9 @@ compile_cplus_instance::decl_name (const char *natural)
   if (natural == nullptr)
     return nullptr;
 
-  char *name = cp_func_name (natural);
+  gdb::unique_xmalloc_ptr<char> name = cp_func_name (natural);
   if (name != nullptr)
-    return gdb::unique_xmalloc_ptr<char> (name);
+    return name;
 
   return gdb::unique_xmalloc_ptr<char> (xstrdup (natural));
 }
index 2024f87c44d7a616b20216ee5c321f9d06e08478..489bcca2b8d912ed31d166430c835cdd738342e9 100644 (file)
@@ -808,10 +808,9 @@ method_name_from_physname (const char *physname)
 /* If FULL_NAME is the demangled name of a C++ function (including an
    arg list, possibly including namespace/class qualifications),
    return a new string containing only the function name (without the
-   arg list/class qualifications).  Otherwise, return NULL.  The
-   caller is responsible for freeing the memory in question.  */
+   arg list/class qualifications).  Otherwise, return NULL.  */
 
-char *
+gdb::unique_xmalloc_ptr<char>
 cp_func_name (const char *full_name)
 {
   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);
   if (!info)
-    return NULL;
+    return nullptr;
 
   ret_comp = unqualified_name_from_comp (info->tree);
 
   if (ret_comp != NULL)
     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
index 32fafe4a5a7c0928d3a5a2378c5bfa3624085aec..2677e1bfcaf7426cd8bf25eab5e834b6b33bd0b5 100644 (file)
@@ -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 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
   (const char *demanged_name);
index caf3162948294ac9715325cf504c22a1e4abb400..1a9d6a6f95838c5ebac5f081fd4f215cf0484ed6 100644 (file)
@@ -2520,6 +2520,7 @@ find_overload_match (gdb::array_view<value *> args,
 
   const char *obj_type_name = NULL;
   const char *func_name = NULL;
+  gdb::unique_xmalloc_ptr<char> temp_func;
   enum oload_classification match_quality;
   enum oload_classification 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_FUNC)
             {
-             char *temp_func;
-
              temp_func = cp_func_name (qualified_name);
 
              /* If cp_func_name did not remove anything, the name of the
                 symbol did not include scope or argument types - it was
                 probably a C-style function.  */
-             if (temp_func)
+             if (temp_func != nullptr)
                {
-                 make_cleanup (xfree, temp_func);
-                 if (strcmp (temp_func, qualified_name) == 0)
+                 if (strcmp (temp_func.get (), qualified_name) == 0)
                    func_name = NULL;
                  else
-                   func_name = temp_func;
+                   func_name = temp_func.get ();
                }
             }
         }