diff options
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIBugReporter.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIBugReporter.cpp | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIBugReporter.cpp b/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIBugReporter.cpp deleted file mode 100644 index 7a3f1332ca8..00000000000 --- a/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIBugReporter.cpp +++ /dev/null @@ -1,112 +0,0 @@ -//===-- MPIBugReporter.cpp - bug reporter -----------------------*- 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 prefabricated reports which are emitted in -/// case of MPI related bugs, detected by path-sensitive analysis. -/// -//===----------------------------------------------------------------------===// - -#include "MPIBugReporter.h" -#include "MPIChecker.h" -#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h" - -namespace clang { -namespace ento { -namespace mpi { - -void MPIBugReporter::reportDoubleNonblocking( - const CallEvent &MPICallEvent, const ento::mpi::Request &Req, - const MemRegion *const RequestRegion, - const ExplodedNode *const ExplNode) const { - - std::string ErrorText; - ErrorText = "Double nonblocking on request " + - RequestRegion->getDescriptiveName() + ". "; - - auto Report = llvm::make_unique<BugReport>(*DoubleNonblockingBugType, - ErrorText, ExplNode); - - Report->addRange(MPICallEvent.getSourceRange()); - SourceRange Range = RequestRegion->sourceRange(); - - if (Range.isValid()) - Report->addRange(Range); - - Report->addVisitor(llvm::make_unique<RequestNodeVisitor>( - RequestRegion, "Request is previously used by nonblocking call here. ")); - Report->markInteresting(RequestRegion); - - BReporter.emitReport(std::move(Report)); -} - -void MPIBugReporter::reportMissingWait( - const ento::mpi::Request &Req, const MemRegion *const RequestRegion, - const ExplodedNode *const ExplNode) const { - std::string ErrorText{"Request " + RequestRegion->getDescriptiveName() + - " has no matching wait. "}; - - auto Report = - llvm::make_unique<BugReport>(*MissingWaitBugType, ErrorText, ExplNode); - - SourceRange Range = RequestRegion->sourceRange(); - if (Range.isValid()) - Report->addRange(Range); - Report->addVisitor(llvm::make_unique<RequestNodeVisitor>( - RequestRegion, "Request is previously used by nonblocking call here. ")); - Report->markInteresting(RequestRegion); - - BReporter.emitReport(std::move(Report)); -} - -void MPIBugReporter::reportUnmatchedWait( - const CallEvent &CE, const clang::ento::MemRegion *const RequestRegion, - const ExplodedNode *const ExplNode) const { - std::string ErrorText{"Request " + RequestRegion->getDescriptiveName() + - " has no matching nonblocking call. "}; - - auto Report = - llvm::make_unique<BugReport>(*UnmatchedWaitBugType, ErrorText, ExplNode); - - Report->addRange(CE.getSourceRange()); - SourceRange Range = RequestRegion->sourceRange(); - if (Range.isValid()) - Report->addRange(Range); - - BReporter.emitReport(std::move(Report)); -} - -PathDiagnosticPiece *MPIBugReporter::RequestNodeVisitor::VisitNode( - const ExplodedNode *N, const ExplodedNode *PrevN, BugReporterContext &BRC, - BugReport &BR) { - - if (IsNodeFound) - return nullptr; - - const Request *const Req = N->getState()->get<RequestMap>(RequestRegion); - const Request *const PrevReq = - PrevN->getState()->get<RequestMap>(RequestRegion); - - // Check if request was previously unused or in a different state. - if ((Req && !PrevReq) || (Req->CurrentState != PrevReq->CurrentState)) { - IsNodeFound = true; - - ProgramPoint P = PrevN->getLocation(); - PathDiagnosticLocation L = - PathDiagnosticLocation::create(P, BRC.getSourceManager()); - - return new PathDiagnosticEventPiece(L, ErrorText); - } - - return nullptr; -} - -} // end of namespace: mpi -} // end of namespace: ento -} // end of namespace: clang |