| //==- BlockCounter.h - ADT for counting block visits ---------------*- 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 |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines BlockCounter, an abstract data type used to count |
| // the number of times a given block has been visited along a path |
| // analyzed by CoreEngine. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_BLOCKCOUNTER_H |
| #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_BLOCKCOUNTER_H |
| |
| #include "llvm/Support/Allocator.h" |
| |
| namespace clang { |
| |
| class StackFrameContext; |
| |
| namespace ento { |
| |
| /// \class BlockCounter |
| /// An abstract data type used to count the number of times a given |
| /// block has been visited along a path analyzed by CoreEngine. |
| class BlockCounter { |
| void *Data; |
| |
| BlockCounter(void *D) : Data(D) {} |
| |
| public: |
| BlockCounter() : Data(nullptr) {} |
| |
| unsigned getNumVisited(const StackFrameContext *CallSite, |
| unsigned BlockID) const; |
| |
| class Factory { |
| void *F; |
| public: |
| Factory(llvm::BumpPtrAllocator& Alloc); |
| ~Factory(); |
| |
| BlockCounter GetEmptyCounter(); |
| BlockCounter IncrementCount(BlockCounter BC, |
| const StackFrameContext *CallSite, |
| unsigned BlockID); |
| }; |
| |
| friend class Factory; |
| }; |
| |
| } // end GR namespace |
| |
| } // end clang namespace |
| |
| #endif |