aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/Module
diff options
context:
space:
mode:
authorDan Liew <daniel.liew@imperial.ac.uk>2014-02-14 14:00:11 +0000
committerDan Liew <daniel.liew@imperial.ac.uk>2014-02-14 14:00:11 +0000
commit3c49bee67765e3b58ff5cfd2dcc26568509e275b (patch)
treecbe3111891effdf3da687810afc31db27ba97447 /lib/Module
parent360f372b46478d4f94f8696f4931cd85c20beb88 (diff)
downloadklee-3c49bee67765e3b58ff5cfd2dcc26568509e275b.tar.gz
Refactor cleaning up memory in linkBCA() so that if linking fails
then clean up is performed.
Diffstat (limited to 'lib/Module')
-rw-r--r--lib/Module/ModuleUtil.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
index 7a0e18d2..349defb3 100644
--- a/lib/Module/ModuleUtil.cpp
+++ b/lib/Module/ModuleUtil.cpp
@@ -152,6 +152,17 @@ GetAllUndefinedSymbols(Module *M, std::set<std::string> &UndefinedSymbols) {
}
+/*! A helper function for linkBCA() which cleans up
+ * memory allocated by that function.
+ */
+static void CleanUpLinkBCA(std::vector<Module*> &archiveModules)
+{
+ for (std::vector<Module*>::iterator I = archiveModules.begin(), E = archiveModules.end();
+ I != E; ++I)
+ {
+ delete (*I);
+ }
+}
/*! A helper function for klee::linkWithLibrary() that links in an archive of bitcode
* modules into a composite bitcode module
@@ -290,7 +301,7 @@ static bool linkBCA(object::Archive* archive, Module* composite, std::string& er
// Linking failed
SS << "Linking archive module with composite failed:" << errorMessage;
SS.flush();
- delete M;
+ CleanUpLinkBCA(archiveModules);
return false;
}
else
@@ -320,13 +331,9 @@ static bool linkBCA(object::Archive* archive, Module* composite, std::string& er
archiveModules.size() << " modules left.\n");
} while (undefinedSymbols != previouslyUndefinedSymbols); // Iterate until we reach a fixed point
- // What's left in archiveModules we don't want to link in so free it
- for (std::vector<Module*>::iterator I = archiveModules.begin(), E = archiveModules.end();
- I != E; ++I)
- {
- delete (*I);
- }
+ // What's left in archiveModules we don't want to link in so free it
+ CleanUpLinkBCA(archiveModules);
return true;