1 //=- AnalysisBasedWarnings.h - Sema warnings based on libAnalysis -*- C++ -*-=//
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
7 //===----------------------------------------------------------------------===//
9 // This file defines AnalysisBasedWarnings, a worker object used by Sema
10 // that issues warnings based on dataflow-analysis.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_SEMA_ANALYSISBASEDWARNINGS_H
14 #define LLVM_CLANG_SEMA_ANALYSISBASEDWARNINGS_H
16 #include "llvm/ADT/DenseMap.h"
27 class FunctionScopeInfo;
32 class AnalysisBasedWarnings {
35 friend class AnalysisBasedWarnings;
36 // The warnings to run.
37 unsigned enableCheckFallThrough : 1;
38 unsigned enableCheckUnreachable : 1;
39 unsigned enableThreadSafetyAnalysis : 1;
40 unsigned enableConsumedAnalysis : 1;
43 void disableCheckFallThrough() { enableCheckFallThrough = 0; }
50 enum VisitFlag { NotVisited = 0, Visited = 1, Pending = 2 };
51 llvm::DenseMap<const FunctionDecl*, VisitFlag> VisitedFD;
56 /// Number of function CFGs built and analyzed.
57 unsigned NumFunctionsAnalyzed;
59 /// Number of functions for which the CFG could not be successfully
61 unsigned NumFunctionsWithBadCFGs;
63 /// Total number of blocks across all CFGs.
64 unsigned NumCFGBlocks;
66 /// Largest number of CFG blocks for a single function analyzed.
67 unsigned MaxCFGBlocksPerFunction;
69 /// Total number of CFGs with variables analyzed for uninitialized
71 unsigned NumUninitAnalysisFunctions;
73 /// Total number of variables analyzed for uninitialized uses.
74 unsigned NumUninitAnalysisVariables;
76 /// Max number of variables analyzed for uninitialized uses in a single
78 unsigned MaxUninitAnalysisVariablesPerFunction;
80 /// Total number of block visits during uninitialized use analysis.
81 unsigned NumUninitAnalysisBlockVisits;
83 /// Max number of block visits during uninitialized use analysis of
84 /// a single function.
85 unsigned MaxUninitAnalysisBlockVisitsPerFunction;
90 AnalysisBasedWarnings(Sema &s);
92 void IssueWarnings(Policy P, FunctionScopeInfo *fscope,
93 const Decl *D, QualType BlockType);
95 Policy getDefaultPolicy() { return DefaultPolicy; }
97 void PrintStats() const;
100 }} // end namespace clang::sema