1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | #ifndef LLVM_CLANG_SEMA_ANALYSISBASEDWARNINGS_H |
14 | #define LLVM_CLANG_SEMA_ANALYSISBASEDWARNINGS_H |
15 | |
16 | #include "llvm/ADT/DenseMap.h" |
17 | |
18 | namespace clang { |
19 | |
20 | class BlockExpr; |
21 | class Decl; |
22 | class FunctionDecl; |
23 | class ObjCMethodDecl; |
24 | class QualType; |
25 | class Sema; |
26 | namespace sema { |
27 | class FunctionScopeInfo; |
28 | } |
29 | |
30 | namespace sema { |
31 | |
32 | class AnalysisBasedWarnings { |
33 | public: |
34 | class Policy { |
35 | friend class AnalysisBasedWarnings; |
36 | |
37 | unsigned enableCheckFallThrough : 1; |
38 | unsigned enableCheckUnreachable : 1; |
39 | unsigned enableThreadSafetyAnalysis : 1; |
40 | unsigned enableConsumedAnalysis : 1; |
41 | public: |
42 | Policy(); |
43 | void disableCheckFallThrough() { enableCheckFallThrough = 0; } |
44 | }; |
45 | |
46 | private: |
47 | Sema &S; |
48 | Policy DefaultPolicy; |
49 | |
50 | enum VisitFlag { NotVisited = 0, Visited = 1, Pending = 2 }; |
51 | llvm::DenseMap<const FunctionDecl*, VisitFlag> VisitedFD; |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | unsigned NumFunctionsAnalyzed; |
58 | |
59 | |
60 | |
61 | unsigned NumFunctionsWithBadCFGs; |
62 | |
63 | |
64 | unsigned NumCFGBlocks; |
65 | |
66 | |
67 | unsigned MaxCFGBlocksPerFunction; |
68 | |
69 | |
70 | |
71 | unsigned NumUninitAnalysisFunctions; |
72 | |
73 | |
74 | unsigned NumUninitAnalysisVariables; |
75 | |
76 | |
77 | |
78 | unsigned MaxUninitAnalysisVariablesPerFunction; |
79 | |
80 | |
81 | unsigned NumUninitAnalysisBlockVisits; |
82 | |
83 | |
84 | |
85 | unsigned MaxUninitAnalysisBlockVisitsPerFunction; |
86 | |
87 | |
88 | |
89 | public: |
90 | AnalysisBasedWarnings(Sema &s); |
91 | |
92 | void IssueWarnings(Policy P, FunctionScopeInfo *fscope, |
93 | const Decl *D, const BlockExpr *blkExpr); |
94 | |
95 | Policy getDefaultPolicy() { return DefaultPolicy; } |
96 | |
97 | void PrintStats() const; |
98 | }; |
99 | |
100 | }} |
101 | |
102 | #endif |
103 | |