Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  60.