28 std::string ErrorText;
29 ErrorText =
"Double nonblocking on request " +
32 auto Report = std::make_unique<PathSensitiveBugReport>(
33 DoubleNonblockingBugType, ErrorText, ExplNode);
41 Report->addVisitor(std::make_unique<RequestNodeVisitor>(
42 RequestRegion,
"Request is previously used by nonblocking call here. "));
43 Report->markInteresting(RequestRegion);
53 " has no matching wait. "};
55 auto Report = std::make_unique<PathSensitiveBugReport>(MissingWaitBugType,
61 Report->addVisitor(std::make_unique<RequestNodeVisitor>(
62 RequestRegion,
"Request is previously used by nonblocking call here. "));
63 Report->markInteresting(RequestRegion);
73 " has no matching nonblocking call. "};
75 auto Report = std::make_unique<PathSensitiveBugReport>(UnmatchedWaitBugType,
87MPIBugReporter::RequestNodeVisitor::VisitNode(
const ExplodedNode *N,
95 assert(Req &&
"The region must be tracked and alive, given that we've "
96 "just emitted a report against it");
108 return std::make_shared<PathDiagnosticEventPiece>(L, ErrorText);
This file defines prefabricated reports which are emitted in case of MPI related bugs,...
A trivial tuple used to represent a source range.
const SourceManager & getSourceManager() const
BugReporter is a utility class for generating PathDiagnostics for analysis.
virtual void emitReport(std::unique_ptr< BugReport > R)
Add the given report to the set of reports tracked by BugReporter.
Represents an abstract call to a function or method along a particular path.
virtual SourceRange getSourceRange() const
Returns a source range for the entire call, suitable for outputting in diagnostics.
const ProgramStateRef & getState() const
ProgramPoint getLocation() const
getLocation - Returns the edge associated with the given node.
ExplodedNode * getFirstPred()
MemRegion - The root abstract class for all memory regions.
std::string getDescriptiveName(bool UseQuotes=true) const
Get descriptive name for memory region.
SourceRange sourceRange() const
Retrieve source range from memory region.
static PathDiagnosticLocation create(const Decl *D, const SourceManager &SM)
Create a location corresponding to the given declaration.
A Range represents the closed range [from, to].
void reportMissingWait(const Request &Req, const MemRegion *const RequestRegion, const ExplodedNode *const ExplNode, BugReporter &BReporter) const
Report a missing wait for a nonblocking call.
void reportDoubleNonblocking(const CallEvent &MPICallEvent, const Request &Req, const MemRegion *const RequestRegion, const ExplodedNode *const ExplNode, BugReporter &BReporter) const
Report duplicate request use by nonblocking calls without intermediate wait.
void reportUnmatchedWait(const CallEvent &CE, const MemRegion *const RequestRegion, const ExplodedNode *const ExplNode, BugReporter &BReporter) const
Report a wait on a request that has not been used at all before.
std::shared_ptr< PathDiagnosticPiece > PathDiagnosticPieceRef
The JSON file list parser is used to communicate input to InstallAPI.