PR jit/63854: Fix leak within jit-builtins.c
authorDavid Malcolm <dmalcolm@redhat.com>
Mon, 1 Dec 2014 17:22:19 +0000 (17:22 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Mon, 1 Dec 2014 17:22:19 +0000 (17:22 +0000)
gcc/jit/ChangeLog:
PR jit/63854
* jit-builtins.c
(gcc::jit::recording::builtins_manager::make_fn_type): Call the
context's new_function_type method, rather than directly creating
a function_type instance.
* jit-recording.c
(gcc::jit::recording::context::new_function_type): New method,
adapted from part of...
(gcc::jit::recording::context::new_function_ptr_type): ...this.
Update to call new_function_type.
* jit-recording.h
(gcc::jit::recording::context::new_function_type): New method.

From-SVN: r218231

gcc/jit/ChangeLog
gcc/jit/jit-builtins.c
gcc/jit/jit-recording.c
gcc/jit/jit-recording.h

index 9555e729dd7988199f92040ea537aee594583c2f..c103eb2045c9b4fb9ed69b4bdee1c5f067884129 100644 (file)
@@ -1,3 +1,18 @@
+2014-12-01  David Malcolm  <dmalcolm@redhat.com>
+
+       PR jit/63854
+       * jit-builtins.c
+       (gcc::jit::recording::builtins_manager::make_fn_type): Call the
+       context's new_function_type method, rather than directly creating
+       a function_type instance.
+       * jit-recording.c
+       (gcc::jit::recording::context::new_function_type): New method,
+       adapted from part of...
+       (gcc::jit::recording::context::new_function_ptr_type): ...this.
+       Update to call new_function_type.
+       * jit-recording.h
+       (gcc::jit::recording::context::new_function_type): New method.
+
 2014-12-01  David Malcolm  <dmalcolm@redhat.com>
 
        PR jit/63969
index 07902e86e76f9a145d4fefcecfb69e970dd118ec..49d37d8f73ab7a03d43f94aa8c498efe90c90323 100644 (file)
@@ -398,11 +398,10 @@ builtins_manager::make_fn_type (enum jit_builtin_type,
   if (!return_type)
     goto error;
 
-  result = new function_type (m_ctxt,
-                             return_type,
-                             num_args,
-                             param_types,
-                             is_variadic);
+  result = m_ctxt->new_function_type (return_type,
+                                     num_args,
+                                     param_types,
+                                     is_variadic);
 
  error:
   delete[] param_types;
index 8069afc7558d3adc5c1af14ae1b32697cfe38b41..32bf03455291056cdbce331f6d452e6e254da9f7 100644 (file)
@@ -492,6 +492,27 @@ recording::context::new_union_type (recording::location *loc,
   return result;
 }
 
+/* Create a recording::function_type instance and add it to this context's
+   list of mementos.
+
+   Used by new_function_ptr_type and by builtins_manager::make_fn_type.  */
+
+recording::function_type *
+recording::context::new_function_type (recording::type *return_type,
+                                      int num_params,
+                                      recording::type **param_types,
+                                      int is_variadic)
+{
+  recording::function_type *fn_type
+    = new function_type (this,
+                        return_type,
+                        num_params,
+                        param_types,
+                        is_variadic);
+  record (fn_type);
+  return fn_type;
+}
+
 /* Create a recording::type instance and add it to this context's list
    of mementos.
 
@@ -505,13 +526,11 @@ recording::context::new_function_ptr_type (recording::location *, /* unused loc
                                           recording::type **param_types,
                                           int is_variadic)
 {
-  recording::function_type *fn_type =
-    new function_type (this,
-                      return_type,
-                      num_params,
-                      param_types,
-                      is_variadic);
-  record (fn_type);
+  recording::function_type *fn_type
+    = new_function_type (return_type,
+                        num_params,
+                        param_types,
+                        is_variadic);
 
   /* Return a pointer-type to the the function type.  */
   return fn_type->get_pointer ();
index 4ea8ef127121c4426ef7112d591b9127b989c0a4..9b2cfc67f3c882af6dfc56d4f12f6eb82173e792 100644 (file)
@@ -88,6 +88,12 @@ public:
   new_union_type (location *loc,
                  const char *name);
 
+  function_type *
+  new_function_type (type *return_type,
+                    int num_params,
+                    type **param_types,
+                    int is_variadic);
+
   type *
   new_function_ptr_type (location *loc,
                         type *return_type,