about summary refs log tree commit diff homepage
path: root/lib/Module/ModuleUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Module/ModuleUtil.cpp')
-rw-r--r--lib/Module/ModuleUtil.cpp37
1 files changed, 11 insertions, 26 deletions
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
index 617a91ca..43eef0b7 100644
--- a/lib/Module/ModuleUtil.cpp
+++ b/lib/Module/ModuleUtil.cpp
@@ -15,6 +15,7 @@
 #include "llvm/IR/Function.h"
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/IntrinsicInst.h"
+#include "llvm/IRReader/IRReader.h"
 #include "llvm/IR/Module.h"
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/DataStream.h"
@@ -54,34 +55,18 @@ using namespace klee;
 Module *klee::linkWithLibrary(Module *module, 
                               const std::string &libraryName) {
 #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 3)
-  Linker linker(module);
-  std::string errorMessage;
-
-  DataStreamer * streamer = getDataFileStreamer(libraryName, &errorMessage);
-
-  if (!streamer)
-    fprintf(stderr, "Error Loading file: %s\n", errorMessage.c_str());
-  assert(streamer);
-  
-  OwningPtr<Module> library_module;
-  library_module.reset(getStreamedBitcodeModule(libraryName, streamer, getGlobalContext(), &errorMessage));
-  if (library_module.get() != 0
-	  && library_module->MaterializeAllPermanently(&errorMessage)) {
-	  library_module.reset();
+  SMDiagnostic err;
+  std::string err_str;
+  sys::Path libraryPath(libraryName);
+  Module *new_mod = ParseIRFile(libraryPath.str(), err, 
+module->getContext());
+
+  if (Linker::LinkModules(module, new_mod, Linker::DestroySource, 
+&err_str)) {
+    assert(0 && "linked in library failed!");
   }
 
-  if (library_module.get() == 0) {
-	  errs() << errorMessage << " for " << libraryName << "\n";
-	  assert(library_module.get());
-  }
-  if (linker.linkInModule(library_module.get(), &errorMessage)){
-	  fprintf(stderr, "Error in Linking %s; Existing module: %s, library to be linked in %s\n", errorMessage.c_str(),
-	      module->getModuleIdentifier().c_str(), libraryName.c_str());
-	  assert(0 && "linking in library failed!");
-  }
-
-  return linker.getModule();
-
+  return module;
 #else
   Linker linker("klee", module, false);