aboutsummaryrefslogtreecommitdiff
path: root/gcc/jit
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2014-12-01 17:22:19 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2014-12-01 17:22:19 +0000
commitc8d19a69348ddcf0e539022fe89b1dcea3835a59 (patch)
tree990760a012debff08c2e3175f91ef5fd8c611529 /gcc/jit
parent9370adeb9da5071af3685adbd697784bdd349cc9 (diff)
downloadgcc-c8d19a69348ddcf0e539022fe89b1dcea3835a59.zip
gcc-c8d19a69348ddcf0e539022fe89b1dcea3835a59.tar.gz
gcc-c8d19a69348ddcf0e539022fe89b1dcea3835a59.tar.bz2
PR jit/63854: Fix leak within jit-builtins.c
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
Diffstat (limited to 'gcc/jit')
-rw-r--r--gcc/jit/ChangeLog15
-rw-r--r--gcc/jit/jit-builtins.c9
-rw-r--r--gcc/jit/jit-recording.c33
-rw-r--r--gcc/jit/jit-recording.h6
4 files changed, 51 insertions, 12 deletions
diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog
index 9555e72..c103eb2 100644
--- a/gcc/jit/ChangeLog
+++ b/gcc/jit/ChangeLog
@@ -1,5 +1,20 @@
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
* jit-playback.c: Ensure that ctxt_progname is non-NULL.
diff --git a/gcc/jit/jit-builtins.c b/gcc/jit/jit-builtins.c
index 07902e8..49d37d8 100644
--- a/gcc/jit/jit-builtins.c
+++ b/gcc/jit/jit-builtins.c
@@ -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;
diff --git a/gcc/jit/jit-recording.c b/gcc/jit/jit-recording.c
index 8069afc..32bf034 100644
--- a/gcc/jit/jit-recording.c
+++ b/gcc/jit/jit-recording.c
@@ -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 ();
diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h
index 4ea8ef1..9b2cfc6 100644
--- a/gcc/jit/jit-recording.h
+++ b/gcc/jit/jit-recording.h
@@ -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,