]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BlockCounter.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / include / clang / StaticAnalyzer / Core / PathSensitive / BlockCounter.h
1 //==- BlockCounter.h - ADT for counting block visits ---------------*- 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 //  This file defines BlockCounter, an abstract data type used to count
10 //  the number of times a given block has been visited along a path
11 //  analyzed by CoreEngine.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_BLOCKCOUNTER_H
16 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_BLOCKCOUNTER_H
17
18 #include "llvm/Support/Allocator.h"
19
20 namespace clang {
21
22 class StackFrameContext;
23
24 namespace ento {
25
26 /// \class BlockCounter
27 /// An abstract data type used to count the number of times a given
28 /// block has been visited along a path analyzed by CoreEngine.
29 class BlockCounter {
30   void *Data;
31
32   BlockCounter(void *D) : Data(D) {}
33
34 public:
35   BlockCounter() : Data(nullptr) {}
36
37   unsigned getNumVisited(const StackFrameContext *CallSite,
38                          unsigned BlockID) const;
39
40   class Factory {
41     void *F;
42   public:
43     Factory(llvm::BumpPtrAllocator& Alloc);
44     ~Factory();
45
46     BlockCounter GetEmptyCounter();
47     BlockCounter IncrementCount(BlockCounter BC,
48                                   const StackFrameContext *CallSite,
49                                   unsigned BlockID);
50   };
51
52   friend class Factory;
53 };
54
55 } // end GR namespace
56
57 } // end clang namespace
58
59 #endif