diff src/pt-jit.cc @ 14955:609dcc297db5

src/pt-jit.cc (jit_info::~jit_info): New function
author Max Brister <max@2bass.com>
date Fri, 15 Jun 2012 14:10:24 -0500
parents 2871d5f8d922
children 4b98b3f66e46
line wrap: on
line diff
--- a/src/pt-jit.cc
+++ b/src/pt-jit.cc
@@ -2820,13 +2820,12 @@
 
 // -------------------- jit_info --------------------
 jit_info::jit_info (tree_jit& tjit, tree& tee)
-  : engine (tjit.get_engine ())
+  : engine (tjit.get_engine ()), llvm_function (0)
 {
-  llvm::Function *fun = 0;
   try
     {
       jit_convert conv (tjit.get_module (), tee);
-      fun = conv.get_function ();
+      llvm_function = conv.get_function ();
       arguments = conv.get_arguments ();
       bounds = conv.get_bounds ();
     }
@@ -2838,22 +2837,28 @@
 #endif
     }
 
-  if (! fun)
+  if (! llvm_function)
     {
       function = 0;
       return;
     }
 
-  tjit.optimize (fun);
+  tjit.optimize (llvm_function);
 
 #ifdef OCTAVE_JIT_DEBUG
   std::cout << "-------------------- optimized llvm ir --------------------\n";
   llvm::raw_os_ostream llvm_cout (std::cout);
-  fun->print (llvm_cout);
+  llvm_function->print (llvm_cout);
   std::cout << std::endl;
 #endif
 
-  function = reinterpret_cast<jited_function>(engine->getPointerToFunction (fun));
+  function = reinterpret_cast<jited_function>(engine->getPointerToFunction (llvm_function));
+}
+
+jit_info::~jit_info (void)
+{
+  if (llvm_function)
+    llvm_function->eraseFromParent ();
 }
 
 bool