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.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
index f369258a..bce6de97 100644
--- a/lib/Module/ModuleUtil.cpp
+++ b/lib/Module/ModuleUtil.cpp
@@ -251,7 +251,13 @@ klee::linkModules(std::vector<std::unique_ptr<llvm::Module>> &modules,
   return composite;
 }
 
-Function *klee::getDirectCallTarget(CallSite cs, bool moduleIsFullyLinked) {
+Function *klee::getDirectCallTarget(
+#if LLVM_VERSION_CODE >= LLVM_VERSION(8, 0)
+    const CallBase &cs,
+#else
+    const CallSite &cs,
+#endif
+    bool moduleIsFullyLinked) {
   Value *v = cs.getCalledValue();
   bool viaConstantExpr = false;
   // Walk through aliases and bitcasts to try to find
@@ -287,11 +293,16 @@ Function *klee::getDirectCallTarget(CallSite cs, bool moduleIsFullyLinked) {
 
 static bool valueIsOnlyCalled(const Value *v) {
   for (auto user : v->users()) {
+#if LLVM_VERSION_CODE >= LLVM_VERSION(8, 0)
+    // Make sure the instruction is a call or invoke.
+    if (const auto *cs_ptr = dyn_cast<CallBase>(user)) {
+      const CallBase &cs = *cs_ptr;
+#else
     if (const auto *instr = dyn_cast<Instruction>(user)) {
       // Make sure the instruction is a call or invoke.
-      CallSite cs(const_cast<Instruction *>(instr));
+      const CallSite cs(const_cast<Instruction *>(instr));
       if (!cs) return false;
-
+#endif
       // Make sure that the value is only the target of this call and
       // not an argument.
       if (cs.hasArgument(v))