about summary refs log tree commit diff homepage
path: root/lib/Module
diff options
context:
space:
mode:
authorRichard Trembecký <richardt@centrum.sk>2016-04-28 18:27:24 +0200
committerCristian Cadar <c.cadar@imperial.ac.uk>2018-05-24 14:08:27 +0100
commit870f2d6aac35457e7524078a4b4a8b011f84c45c (patch)
tree8a71e5308e1e5f0fbae089dc8fef993169097fbf /lib/Module
parent9388395c21e512796b39baca81324ffb7b70de60 (diff)
downloadklee-870f2d6aac35457e7524078a4b4a8b011f84c45c.tar.gz
llvm: make KLEE compile against LLVM 3.7
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Diffstat (limited to 'lib/Module')
-rw-r--r--lib/Module/InstructionInfoTable.cpp6
-rw-r--r--lib/Module/ModuleUtil.cpp30
-rw-r--r--lib/Module/Optimize.cpp4
-rw-r--r--lib/Module/RaiseAsm.cpp5
4 files changed, 39 insertions, 6 deletions
diff --git a/lib/Module/InstructionInfoTable.cpp b/lib/Module/InstructionInfoTable.cpp
index e2f05205..3d9bf5ae 100644
--- a/lib/Module/InstructionInfoTable.cpp
+++ b/lib/Module/InstructionInfoTable.cpp
@@ -94,9 +94,15 @@ bool InstructionInfoTable::getInstructionDebugInfo(const llvm::Instruction *I,
                                                    const std::string *&File,
                                                    unsigned &Line) {
   if (MDNode *N = I->getMetadata("dbg")) {
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
+    DILocation *Loc = cast<DILocation>(N);
+    File = internString(getDSPIPath(*Loc));
+    Line = Loc->getLine();
+#else
     DILocation Loc(N);
     File = internString(getDSPIPath(Loc));
     Line = Loc.getLineNumber();
+#endif
     return true;
   }
 
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
index a86adc98..b07d3d2f 100644
--- a/lib/Module/ModuleUtil.cpp
+++ b/lib/Module/ModuleUtil.cpp
@@ -258,13 +258,21 @@ static bool linkBCA(object::Archive* archive, Module* composite, std::string& er
         Module *Result = 0;
         // FIXME: Maybe load bitcode file lazily? Then if we need to link, materialise the module
 #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
-        ErrorOr<Module *> resultErr = parseBitcodeFile(buff.get(),
-	    composite->getContext());
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
+        ErrorOr<std::unique_ptr<Module> > resultErr =
+#else
+        ErrorOr<Module *> resultErr =
+#endif
+	    parseBitcodeFile(buff.get(), composite->getContext());
         ec = resultErr.getError();
         if (ec)
           errorMessage = ec.message();
         else
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
+          Result = resultErr->release();
+#else
           Result = resultErr.get();
+#endif
 #else
         Result = ParseBitcodeFile(buff.get(), composite->getContext(),
 	    &errorMessage);
@@ -421,7 +429,12 @@ Module *klee::linkWithLibrary(Module *module,
   if (magic == sys::fs::file_magic::bitcode) {
     Module *Result = 0;
 #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
-    ErrorOr<Module *> ResultErr = parseBitcodeFile(Buffer, Context);
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
+    ErrorOr<std::unique_ptr<Module> > ResultErr =
+#else
+    ErrorOr<Module *> ResultErr =
+#endif
+	parseBitcodeFile(Buffer, Context);
     if ((ec = ResultErr.getError())) {
       ErrorMessage = ec.message();
 #else
@@ -432,7 +445,9 @@ Module *klee::linkWithLibrary(Module *module,
           ErrorMessage.c_str());
     }
 
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
+    Result = ResultErr->release();
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
     Result = ResultErr.get();
 #endif
 
@@ -446,7 +461,10 @@ Module *klee::linkWithLibrary(Module *module,
           ErrorMessage.c_str());
     }
 
+// unique_ptr owns the Module, we don't have to delete it
+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 7)
     delete Result;
+#endif
 
   } else if (magic == sys::fs::file_magic::archive) {
 #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
@@ -615,7 +633,11 @@ Module *klee::loadModule(LLVMContext &ctx, const std::string &path, std::string
   // The module has taken ownership of the MemoryBuffer so release it
   // from the std::unique_ptr
   buffer->release();
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
+  auto module = errorOrModule->release();
+#else
   auto module = *errorOrModule;
+#endif
 
   if (auto ec = module->materializeAllPermanently()) {
     errorMsg = ec.message();
diff --git a/lib/Module/Optimize.cpp b/lib/Module/Optimize.cpp
index 02ab446a..64e4863f 100644
--- a/lib/Module/Optimize.cpp
+++ b/lib/Module/Optimize.cpp
@@ -154,7 +154,9 @@ void Optimize(Module *M, const std::string &EntryPoint) {
     Passes.add(createVerifierPass());
 
   // Add an appropriate DataLayout instance for this module...
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
+  // LLVM 3.7+ doesn't have DataLayoutPass anymore.
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
   DataLayoutPass *dlpass = new DataLayoutPass();
   dlpass->doInitialization(*M);
   addPass(Passes, dlpass);
diff --git a/lib/Module/RaiseAsm.cpp b/lib/Module/RaiseAsm.cpp
index 13e4f7d4..c597fa2a 100644
--- a/lib/Module/RaiseAsm.cpp
+++ b/lib/Module/RaiseAsm.cpp
@@ -81,7 +81,10 @@ bool RaiseAsmPass::runOnModule(Module &M) {
     klee_warning("Warning: unable to select native target: %s", Err.c_str());
     TLI = 0;
   } else {
-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
+    TM = NativeTarget->createTargetMachine(HostTriple, "", "", TargetOptions());
+    TLI = TM->getSubtargetImpl(*(M.begin()))->getTargetLowering();
+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
     TM = NativeTarget->createTargetMachine(HostTriple, "", "", TargetOptions());
     TLI = TM->getSubtargetImpl()->getTargetLowering();
 #else