Coverage Report

Created: 2023-09-30 09:22

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPITypes.h
Line
Count
Source
1
//===-- MPITypes.h - Functionality to model MPI concepts --------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
///
9
/// \file
10
/// This file provides definitions to model concepts of MPI. The mpi::Request
11
/// class defines a wrapper class, in order to make MPI requests trackable for
12
/// path-sensitive analysis.
13
///
14
//===----------------------------------------------------------------------===//
15
16
#ifndef LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_MPICHECKER_MPITYPES_H
17
#define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_MPICHECKER_MPITYPES_H
18
19
#include "clang/StaticAnalyzer/Checkers/MPIFunctionClassifier.h"
20
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
21
#include "llvm/ADT/SmallSet.h"
22
23
namespace clang {
24
namespace ento {
25
namespace mpi {
26
27
class Request {
28
public:
29
  enum State : unsigned char { Nonblocking, Wait };
30
31
97
  Request(State S) : CurrentState{S} {}
32
33
151
  void Profile(llvm::FoldingSetNodeID &Id) const {
34
151
    Id.AddInteger(CurrentState);
35
151
  }
36
37
7
  bool operator==(const Request &ToCompare) const {
38
7
    return CurrentState == ToCompare.CurrentState;
39
7
  }
40
41
  const State CurrentState;
42
};
43
44
// The RequestMap stores MPI requests which are identified by their memory
45
// region. Requests are used in MPI to complete nonblocking operations with wait
46
// operations. A custom map implementation is used, in order to make it
47
// available in an arbitrary amount of translation units.
48
struct RequestMap {};
49
typedef llvm::ImmutableMap<const clang::ento::MemRegion *,
50
                           clang::ento::mpi::Request>
51
    RequestMapImpl;
52
53
} // end of namespace: mpi
54
55
template <>
56
struct ProgramStateTrait<mpi::RequestMap>
57
    : public ProgramStatePartialTrait<mpi::RequestMapImpl> {
58
1.55k
  static void *GDMIndex() {
59
1.55k
    static int index = 0;
60
1.55k
    return &index;
61
1.55k
  }
62
};
63
64
} // end of namespace: ento
65
} // end of namespace: clang
66
#endif