| 23 | namespace util { |
| 24 | |
| 25 | static inline llvm::Function * |
| 26 | getCalledFunction(const llvm::CallBase &CB, |
| 27 | IndCallSolverMgr *Solver = nullptr) { |
| 28 | if (const auto *CO = CB.getCalledOperand()) { |
| 29 | const auto *F = |
| 30 | llvm::dyn_cast_or_null<llvm::Function>(CO->stripPointerCasts()); |
| 31 | if (F) |
| 32 | return const_cast<llvm::Function *>(F); |
| 33 | } |
| 34 | if (!Solver) |
| 35 | return nullptr; |
| 36 | |
| 37 | return const_cast<llvm::Function *>(Solver->getCalledFunction(CB)); |
| 38 | } |
| 39 | |
| 40 | static inline llvm::StringRef |
| 41 | getFileContent(const clang::FileID &ID, |