diff options
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/MPI-Checker')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp index 7f9ba0de1dc2..7ac7a38dacf3 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp @@ -16,6 +16,7 @@ #include "MPIChecker.h" #include "clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/DynamicSize.h" namespace clang { namespace ento { @@ -146,7 +147,7 @@ void MPIChecker::allRegionsUsedByWait( llvm::SmallVector<const MemRegion *, 2> &ReqRegions, const MemRegion *const MR, const CallEvent &CE, CheckerContext &Ctx) const { - MemRegionManager *const RegionManager = MR->getMemRegionManager(); + MemRegionManager &RegionManager = MR->getMemRegionManager(); if (FuncClassifier->isMPI_Waitall(CE.getCalleeIdentifier())) { const SubRegion *SuperRegion{nullptr}; @@ -160,15 +161,16 @@ void MPIChecker::allRegionsUsedByWait( return; } - const auto &Size = Ctx.getStoreManager().getSizeInElements( - Ctx.getState(), SuperRegion, + DefinedOrUnknownSVal ElementCount = getDynamicElementCount( + Ctx.getState(), SuperRegion, Ctx.getSValBuilder(), CE.getArgExpr(1)->getType()->getPointeeType()); - const llvm::APSInt &ArrSize = Size.getAs<nonloc::ConcreteInt>()->getValue(); + const llvm::APSInt &ArrSize = + ElementCount.getAs<nonloc::ConcreteInt>()->getValue(); for (size_t i = 0; i < ArrSize; ++i) { const NonLoc Idx = Ctx.getSValBuilder().makeArrayIndex(i); - const ElementRegion *const ER = RegionManager->getElementRegion( + const ElementRegion *const ER = RegionManager.getElementRegion( CE.getArgExpr(1)->getType()->getPointeeType(), Idx, SuperRegion, Ctx.getASTContext()); @@ -188,6 +190,6 @@ void clang::ento::registerMPIChecker(CheckerManager &MGR) { MGR.registerChecker<clang::ento::mpi::MPIChecker>(); } -bool clang::ento::shouldRegisterMPIChecker(const LangOptions &LO) { +bool clang::ento::shouldRegisterMPIChecker(const CheckerManager &mgr) { return true; } |