Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //=- AnalysisBasedWarnings.h - Sema warnings based on libAnalysis -*- 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 AnalysisBasedWarnings, a worker object used by Sema
  10. // that issues warnings based on dataflow-analysis.
  11. //===----------------------------------------------------------------------===//
  12.  
  13. #ifndef LLVM_CLANG_SEMA_ANALYSISBASEDWARNINGS_H
  14. #define LLVM_CLANG_SEMA_ANALYSISBASEDWARNINGS_H
  15.  
  16. #include "llvm/ADT/DenseMap.h"
  17. #include <memory>
  18.  
  19. namespace clang {
  20.  
  21. class Decl;
  22. class FunctionDecl;
  23. class QualType;
  24. class Sema;
  25. namespace sema {
  26.   class FunctionScopeInfo;
  27. }
  28.  
  29. namespace sema {
  30.  
  31. class AnalysisBasedWarnings {
  32. public:
  33.   class Policy {
  34.     friend class AnalysisBasedWarnings;
  35.     // The warnings to run.
  36.     unsigned enableCheckFallThrough : 1;
  37.     unsigned enableCheckUnreachable : 1;
  38.     unsigned enableThreadSafetyAnalysis : 1;
  39.     unsigned enableConsumedAnalysis : 1;
  40.   public:
  41.     Policy();
  42.     void disableCheckFallThrough() { enableCheckFallThrough = 0; }
  43.   };
  44.  
  45. private:
  46.   Sema &S;
  47.   Policy DefaultPolicy;
  48.  
  49.   class InterProceduralData;
  50.   std::unique_ptr<InterProceduralData> IPData;
  51.  
  52.   enum VisitFlag { NotVisited = 0, Visited = 1, Pending = 2 };
  53.   llvm::DenseMap<const FunctionDecl*, VisitFlag> VisitedFD;
  54.  
  55.   /// \name Statistics
  56.   /// @{
  57.  
  58.   /// Number of function CFGs built and analyzed.
  59.   unsigned NumFunctionsAnalyzed;
  60.  
  61.   /// Number of functions for which the CFG could not be successfully
  62.   /// built.
  63.   unsigned NumFunctionsWithBadCFGs;
  64.  
  65.   /// Total number of blocks across all CFGs.
  66.   unsigned NumCFGBlocks;
  67.  
  68.   /// Largest number of CFG blocks for a single function analyzed.
  69.   unsigned MaxCFGBlocksPerFunction;
  70.  
  71.   /// Total number of CFGs with variables analyzed for uninitialized
  72.   /// uses.
  73.   unsigned NumUninitAnalysisFunctions;
  74.  
  75.   /// Total number of variables analyzed for uninitialized uses.
  76.   unsigned NumUninitAnalysisVariables;
  77.  
  78.   /// Max number of variables analyzed for uninitialized uses in a single
  79.   /// function.
  80.   unsigned MaxUninitAnalysisVariablesPerFunction;
  81.  
  82.   /// Total number of block visits during uninitialized use analysis.
  83.   unsigned NumUninitAnalysisBlockVisits;
  84.  
  85.   /// Max number of block visits during uninitialized use analysis of
  86.   /// a single function.
  87.   unsigned MaxUninitAnalysisBlockVisitsPerFunction;
  88.  
  89.   /// @}
  90.  
  91. public:
  92.   AnalysisBasedWarnings(Sema &s);
  93.   ~AnalysisBasedWarnings();
  94.  
  95.   void IssueWarnings(Policy P, FunctionScopeInfo *fscope,
  96.                      const Decl *D, QualType BlockType);
  97.  
  98.   Policy getDefaultPolicy() { return DefaultPolicy; }
  99.  
  100.   void PrintStats() const;
  101. };
  102.  
  103. } // namespace sema
  104. } // namespace clang
  105.  
  106. #endif
  107.