1//==- BlockCounter.h - ADT for counting block visits ---------------*- C++ -*-// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines BlockCounter, an abstract data type used to count 11// the number of times a given block has been visited along a path 12// analyzed by CoreEngine. 13// 14//===----------------------------------------------------------------------===// 15 16#ifndef LLVM_CLANG_GR_BLOCKCOUNTER 17#define LLVM_CLANG_GR_BLOCKCOUNTER 18 19namespace llvm { 20 class BumpPtrAllocator; 21} 22 23namespace clang { 24 25class StackFrameContext; 26 27namespace ento { 28 29/// \class BlockCounter 30/// \brief An abstract data type used to count the number of times a given 31/// block has been visited along a path analyzed by CoreEngine. 32class BlockCounter { 33 void *Data; 34 35 BlockCounter(void *D) : Data(D) {} 36 37public: 38 BlockCounter() : Data(0) {} 39 40 unsigned getNumVisited(const StackFrameContext *CallSite, 41 unsigned BlockID) const; 42 43 class Factory { 44 void *F; 45 public: 46 Factory(llvm::BumpPtrAllocator& Alloc); 47 ~Factory(); 48 49 BlockCounter GetEmptyCounter(); 50 BlockCounter IncrementCount(BlockCounter BC, 51 const StackFrameContext *CallSite, 52 unsigned BlockID); 53 }; 54 55 friend class Factory; 56}; 57 58} // end GR namespace 59 60} // end clang namespace 61 62#endif 63