summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Checkers
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2016-07-25 15:27:16 +0000
committerAlexander Kornienko <alexfh@google.com>2016-07-25 15:27:16 +0000
commitc5e509316a5dfe418721b5c714325bf12168696d (patch)
tree6d43ba2c0e99d1007248eaae55b4afade057ab55 /clang/lib/StaticAnalyzer/Checkers
parent080bebd212869135dbae80bb721f38f4eefeee12 (diff)
downloadbcm5719-llvm-c5e509316a5dfe418721b5c714325bf12168696d.tar.gz
bcm5719-llvm-c5e509316a5dfe418721b5c714325bf12168696d.zip
MPI-Checker: move MPIFunctionClassifier.h
Summary: This patch moves the MPIFunctionClassifier header to `clang/include/clang/StaticAnalyzer/Checkers`, in order to make it accessible in other parts of the architecture. Reviewers: dcoughlin, zaks.anna Subscribers: alexfh, cfe-commits Patch by Alexander Droste! Differential Revision: https://reviews.llvm.org/D22671 llvm-svn: 276639
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp9
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h5
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIFunctionClassifier.cpp2
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIFunctionClassifier.h97
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPITypes.h3
5 files changed, 10 insertions, 106 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp
index c3d0f8f2a12..c667b9e67d4 100644
--- a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp
@@ -43,7 +43,8 @@ void MPIChecker::checkDoubleNonblocking(const CallEvent &PreCallEvent,
// double nonblocking detected
if (Req && Req->CurrentState == Request::State::Nonblocking) {
ExplodedNode *ErrorNode = Ctx.generateNonFatalErrorNode();
- BReporter.reportDoubleNonblocking(PreCallEvent, *Req, MR, ErrorNode, Ctx.getBugReporter());
+ BReporter.reportDoubleNonblocking(PreCallEvent, *Req, MR, ErrorNode,
+ Ctx.getBugReporter());
Ctx.addTransition(ErrorNode->getState(), ErrorNode);
}
// no error
@@ -85,7 +86,8 @@ void MPIChecker::checkUnmatchedWaits(const CallEvent &PreCallEvent,
State = ErrorNode->getState();
}
// A wait has no matching nonblocking call.
- BReporter.reportUnmatchedWait(PreCallEvent, ReqRegion, ErrorNode, Ctx.getBugReporter());
+ BReporter.reportUnmatchedWait(PreCallEvent, ReqRegion, ErrorNode,
+ Ctx.getBugReporter());
}
}
@@ -118,7 +120,8 @@ void MPIChecker::checkMissingWaits(SymbolReaper &SymReaper,
ErrorNode = Ctx.generateNonFatalErrorNode(State, &Tag);
State = ErrorNode->getState();
}
- BReporter.reportMissingWait(Req.second, Req.first, ErrorNode, Ctx.getBugReporter());
+ BReporter.reportMissingWait(Req.second, Req.first, ErrorNode,
+ Ctx.getBugReporter());
}
State = State->remove<RequestMap>(Req.first);
}
diff --git a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h
index 20c60ad076a..45bfd3b84bb 100644
--- a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h
+++ b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h
@@ -19,8 +19,8 @@
#define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_MPICHECKER_MPICHECKER_H
#include "MPIBugReporter.h"
-#include "MPIFunctionClassifier.h"
#include "MPITypes.h"
+#include "clang/StaticAnalyzer/Checkers/MPIFunctionClassifier.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
@@ -30,7 +30,7 @@ namespace mpi {
class MPIChecker : public Checker<check::PreCall, check::DeadSymbols> {
public:
- MPIChecker() : BReporter(*this) { }
+ MPIChecker() : BReporter(*this) {}
// path-sensitive callbacks
void checkPreCall(const CallEvent &CE, CheckerContext &Ctx) const {
@@ -49,7 +49,6 @@ public:
return;
const_cast<std::unique_ptr<MPIFunctionClassifier> &>(FuncClassifier)
.reset(new MPIFunctionClassifier{Ctx.getASTContext()});
-
}
/// Checks if a request is used by nonblocking calls multiple times
diff --git a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIFunctionClassifier.cpp b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIFunctionClassifier.cpp
index ad937f683d3..12760abaeef 100644
--- a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIFunctionClassifier.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIFunctionClassifier.cpp
@@ -12,7 +12,7 @@
///
//===----------------------------------------------------------------------===//
-#include "MPIFunctionClassifier.h"
+#include "clang/StaticAnalyzer/Checkers/MPIFunctionClassifier.h"
#include "llvm/ADT/STLExtras.h"
namespace clang {
diff --git a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIFunctionClassifier.h b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIFunctionClassifier.h
deleted file mode 100644
index 65e908912c5..00000000000
--- a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIFunctionClassifier.h
+++ /dev/null
@@ -1,97 +0,0 @@
-//===-- MPIFunctionClassifier.h - classifies MPI functions ----*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// This file defines functionality to identify and classify MPI functions.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_MPICHECKER_MPIFUNCTIONCLASSIFIER_H
-#define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_MPICHECKER_MPIFUNCTIONCLASSIFIER_H
-
-#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
-
-namespace clang {
-namespace ento {
-namespace mpi {
-
-class MPIFunctionClassifier {
-public:
- MPIFunctionClassifier(ASTContext &ASTCtx) { identifierInit(ASTCtx); }
-
- // general identifiers
- bool isMPIType(const IdentifierInfo *const IdentInfo) const;
- bool isNonBlockingType(const IdentifierInfo *const IdentInfo) const;
-
- // point-to-point identifiers
- bool isPointToPointType(const IdentifierInfo *const IdentInfo) const;
-
- // collective identifiers
- bool isCollectiveType(const IdentifierInfo *const IdentInfo) const;
- bool isCollToColl(const IdentifierInfo *const IdentInfo) const;
- bool isScatterType(const IdentifierInfo *const IdentInfo) const;
- bool isGatherType(const IdentifierInfo *const IdentInfo) const;
- bool isAllgatherType(const IdentifierInfo *const IdentInfo) const;
- bool isAlltoallType(const IdentifierInfo *const IdentInfo) const;
- bool isReduceType(const IdentifierInfo *const IdentInfo) const;
- bool isBcastType(const IdentifierInfo *const IdentInfo) const;
-
- // additional identifiers
- bool isMPI_Wait(const IdentifierInfo *const IdentInfo) const;
- bool isMPI_Waitall(const IdentifierInfo *const IdentInfo) const;
- bool isWaitType(const IdentifierInfo *const IdentInfo) const;
-
-private:
- // Initializes function identifiers, to recognize them during analysis.
- void identifierInit(ASTContext &ASTCtx);
- void initPointToPointIdentifiers(ASTContext &ASTCtx);
- void initCollectiveIdentifiers(ASTContext &ASTCtx);
- void initAdditionalIdentifiers(ASTContext &ASTCtx);
-
- // The containers are used, to enable classification of MPI-functions during
- // analysis.
- llvm::SmallVector<IdentifierInfo *, 12> MPINonBlockingTypes;
-
- llvm::SmallVector<IdentifierInfo *, 10> MPIPointToPointTypes;
- llvm::SmallVector<IdentifierInfo *, 16> MPICollectiveTypes;
-
- llvm::SmallVector<IdentifierInfo *, 4> MPIPointToCollTypes;
- llvm::SmallVector<IdentifierInfo *, 4> MPICollToPointTypes;
- llvm::SmallVector<IdentifierInfo *, 6> MPICollToCollTypes;
-
- llvm::SmallVector<IdentifierInfo *, 32> MPIType;
-
- // point-to-point functions
- IdentifierInfo *IdentInfo_MPI_Send = nullptr, *IdentInfo_MPI_Isend = nullptr,
- *IdentInfo_MPI_Ssend = nullptr, *IdentInfo_MPI_Issend = nullptr,
- *IdentInfo_MPI_Bsend = nullptr, *IdentInfo_MPI_Ibsend = nullptr,
- *IdentInfo_MPI_Rsend = nullptr, *IdentInfo_MPI_Irsend = nullptr,
- *IdentInfo_MPI_Recv = nullptr, *IdentInfo_MPI_Irecv = nullptr;
-
- // collective functions
- IdentifierInfo *IdentInfo_MPI_Scatter = nullptr,
- *IdentInfo_MPI_Iscatter = nullptr, *IdentInfo_MPI_Gather = nullptr,
- *IdentInfo_MPI_Igather = nullptr, *IdentInfo_MPI_Allgather = nullptr,
- *IdentInfo_MPI_Iallgather = nullptr, *IdentInfo_MPI_Bcast = nullptr,
- *IdentInfo_MPI_Ibcast = nullptr, *IdentInfo_MPI_Reduce = nullptr,
- *IdentInfo_MPI_Ireduce = nullptr, *IdentInfo_MPI_Allreduce = nullptr,
- *IdentInfo_MPI_Iallreduce = nullptr, *IdentInfo_MPI_Alltoall = nullptr,
- *IdentInfo_MPI_Ialltoall = nullptr, *IdentInfo_MPI_Barrier = nullptr;
-
- // additional functions
- IdentifierInfo *IdentInfo_MPI_Comm_rank = nullptr,
- *IdentInfo_MPI_Comm_size = nullptr, *IdentInfo_MPI_Wait = nullptr,
- *IdentInfo_MPI_Waitall = nullptr;
-};
-
-} // end of namespace: mpi
-} // end of namespace: ento
-} // end of namespace: clang
-
-#endif
diff --git a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPITypes.h b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPITypes.h
index 27ec950d31e..2e7140cd771 100644
--- a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPITypes.h
+++ b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPITypes.h
@@ -17,7 +17,7 @@
#ifndef LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_MPICHECKER_MPITYPES_H
#define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_MPICHECKER_MPITYPES_H
-#include "MPIFunctionClassifier.h"
+#include "clang/StaticAnalyzer/Checkers/MPIFunctionClassifier.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "llvm/ADT/SmallSet.h"
@@ -53,7 +53,6 @@ typedef llvm::ImmutableMap<const clang::ento::MemRegion *,
} // end of namespace: mpi
-
template <>
struct ProgramStateTrait<mpi::RequestMap>
: public ProgramStatePartialTrait<mpi::RequestMapImpl> {
OpenPOWER on IntegriCloud