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