//===-- MPITypes.h - Functionality to model MPI concepts --------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// This file provides definitions to model concepts of MPI. The mpi::Request /// class defines a wrapper class, in order to make MPI requests trackable for /// path-sensitive analysis. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_MPICHECKER_MPITYPES_H #define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_MPICHECKER_MPITYPES_H #include "clang/StaticAnalyzer/Checkers/MPIFunctionClassifier.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h" #include "llvm/ADT/SmallSet.h" namespace clang { namespace ento { namespace mpi { class Request { … }; // The RequestMap stores MPI requests which are identified by their memory // region. Requests are used in MPI to complete nonblocking operations with wait // operations. A custom map implementation is used, in order to make it // available in an arbitrary amount of translation units. struct RequestMap { … }; RequestMapImpl; } // end of namespace: mpi template <> struct ProgramStateTrait<mpi::RequestMap> : public ProgramStatePartialTrait<mpi::RequestMapImpl> { … }; } // end of namespace: ento } // end of namespace: clang #endif