class MPIChecker

Declaration

class MPIChecker : public Checker { /* full declaration omitted */ };

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:30

Inherits from: Checker

Member Variables

private const std::unique_ptr<MPIFunctionClassifier> FuncClassifier
private clang::ento::mpi::MPIBugReporter BReporter

Method Overview

  • public MPIChecker()
  • private void allRegionsUsedByWait(llvm::SmallVector<const clang::ento::MemRegion *, 2> & ReqRegions, const clang::ento::MemRegion *const MR, const clang::ento::CallEvent & CE, clang::ento::CheckerContext & Ctx) const
  • public void checkDeadSymbols(clang::ento::SymbolReaper & SymReaper, clang::ento::CheckerContext & Ctx) const
  • public void checkDoubleNonblocking(const clang::ento::CallEvent & PreCallEvent, clang::ento::CheckerContext & Ctx) const
  • public void checkMissingWaits(clang::ento::SymbolReaper & SymReaper, clang::ento::CheckerContext & Ctx) const
  • public void checkPreCall(const clang::ento::CallEvent & CE, clang::ento::CheckerContext & Ctx) const
  • public void checkUnmatchedWaits(const clang::ento::CallEvent & PreCallEvent, clang::ento::CheckerContext & Ctx) const
  • public void dynamicInit(clang::ento::CheckerContext & Ctx) const
  • private const clang::ento::MemRegion * topRegionUsedByWait(const clang::ento::CallEvent & CE) const

Methods

MPIChecker()

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:32

void allRegionsUsedByWait(
    llvm::SmallVector<
        const clang::ento::MemRegion*,
        2>& ReqRegions,
    const clang::ento::MemRegion* const MR,
    const clang::ento::CallEvent& CE,
    clang::ento::CheckerContext& Ctx) const

Description

Collects all memory regions of a request(array) used by a wait function. If the wait function uses a single request, this is a single region. For wait functions using multiple requests, multiple regions representing elements in the array are collected.

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:84

Parameters

llvm::SmallVector<const clang::ento::MemRegion*, 2>& ReqRegions
vector the regions get pushed into
const clang::ento::MemRegion* const MR
top most region to iterate
const clang::ento::CallEvent& CE
MPI wait call using the request(s)
clang::ento::CheckerContext& Ctx

void checkDeadSymbols(
    clang::ento::SymbolReaper& SymReaper,
    clang::ento::CheckerContext& Ctx) const

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:41

Parameters

clang::ento::SymbolReaper& SymReaper
clang::ento::CheckerContext& Ctx

void checkDoubleNonblocking(
    const clang::ento::CallEvent& PreCallEvent,
    clang::ento::CheckerContext& Ctx) const

Description

Checks if a request is used by nonblocking calls multiple times in sequence without intermediate wait. The check contains a guard, in order to only inspect nonblocking functions.

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:58

Parameters

const clang::ento::CallEvent& PreCallEvent
MPI call to verify
clang::ento::CheckerContext& Ctx

void checkMissingWaits(
    clang::ento::SymbolReaper& SymReaper,
    clang::ento::CheckerContext& Ctx) const

Description

Check if a nonblocking call is not matched by a wait. If a memory region is not alive and the last function using the request was a nonblocking call, this is rated as a missing wait.

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:72

Parameters

clang::ento::SymbolReaper& SymReaper
clang::ento::CheckerContext& Ctx

void checkPreCall(
    const clang::ento::CallEvent& CE,
    clang::ento::CheckerContext& Ctx) const

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:35

Parameters

const clang::ento::CallEvent& CE
clang::ento::CheckerContext& Ctx

void checkUnmatchedWaits(
    const clang::ento::CallEvent& PreCallEvent,
    clang::ento::CheckerContext& Ctx) const

Description

Checks if the request used by the wait function was not used at all before. The check contains a guard, in order to only inspect wait functions.

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:66

Parameters

const clang::ento::CallEvent& PreCallEvent
MPI call to verify
clang::ento::CheckerContext& Ctx

void dynamicInit(
    clang::ento::CheckerContext& Ctx) const

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:46

Parameters

clang::ento::CheckerContext& Ctx

const clang::ento::MemRegion* topRegionUsedByWait(
    const clang::ento::CallEvent& CE) const

Description

Returns the memory region used by a wait function. Distinguishes between MPI_Wait and MPI_Waitall.

Declared at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.h:94

Parameters

const clang::ento::CallEvent& CE
MPI wait call