clang  14.0.0git
BlockCounter.h
Go to the documentation of this file.
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 
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
clang::ento::BlockCounter::Factory::Factory
Factory(llvm::BumpPtrAllocator &Alloc)
Definition: BlockCounter.cpp:64
clang::ento::BlockCounter::BlockCounter
BlockCounter()
Definition: BlockCounter.h:35
clang::ento::BlockCounter::Factory::GetEmptyCounter
BlockCounter GetEmptyCounter()
Definition: BlockCounter.cpp:82
clang::ento::BlockCounter::getNumVisited
unsigned getNumVisited(const StackFrameContext *CallSite, unsigned BlockID) const
Definition: BlockCounter.cpp:57
clang::StackFrameContext
It represents a stack frame of the call stack (based on CallEvent).
Definition: AnalysisDeclContext.h:295
clang::api_notes::BlockID
BlockID
The various types of blocks that can occur within a API notes file.
Definition: APINotesFormat.h:38
clang::ento::BlockCounter::Factory
Definition: BlockCounter.h:40
clang::ento::BlockCounter::Factory::IncrementCount
BlockCounter IncrementCount(BlockCounter BC, const StackFrameContext *CallSite, unsigned BlockID)
Definition: BlockCounter.cpp:73
clang::ento::BlockCounter::Factory::~Factory
~Factory()
Definition: BlockCounter.cpp:68
clang
Definition: CalledOnceCheck.h:17
clang::ento::BlockCounter
Definition: BlockCounter.h:29