diff options
Diffstat (limited to 'clang-r353983e/include/clang/Sema/AnalysisBasedWarnings.h')
| -rw-r--r-- | clang-r353983e/include/clang/Sema/AnalysisBasedWarnings.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/clang-r353983e/include/clang/Sema/AnalysisBasedWarnings.h b/clang-r353983e/include/clang/Sema/AnalysisBasedWarnings.h new file mode 100644 index 00000000..d5df5364 --- /dev/null +++ b/clang-r353983e/include/clang/Sema/AnalysisBasedWarnings.h @@ -0,0 +1,102 @@ +//=- AnalysisBasedWarnings.h - Sema warnings based on libAnalysis -*- C++ -*-=// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file defines AnalysisBasedWarnings, a worker object used by Sema +// that issues warnings based on dataflow-analysis. +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_SEMA_ANALYSISBASEDWARNINGS_H +#define LLVM_CLANG_SEMA_ANALYSISBASEDWARNINGS_H + +#include "llvm/ADT/DenseMap.h" + +namespace clang { + +class BlockExpr; +class Decl; +class FunctionDecl; +class ObjCMethodDecl; +class QualType; +class Sema; +namespace sema { + class FunctionScopeInfo; +} + +namespace sema { + +class AnalysisBasedWarnings { +public: + class Policy { + friend class AnalysisBasedWarnings; + // The warnings to run. + unsigned enableCheckFallThrough : 1; + unsigned enableCheckUnreachable : 1; + unsigned enableThreadSafetyAnalysis : 1; + unsigned enableConsumedAnalysis : 1; + public: + Policy(); + void disableCheckFallThrough() { enableCheckFallThrough = 0; } + }; + +private: + Sema &S; + Policy DefaultPolicy; + + enum VisitFlag { NotVisited = 0, Visited = 1, Pending = 2 }; + llvm::DenseMap<const FunctionDecl*, VisitFlag> VisitedFD; + + /// \name Statistics + /// @{ + + /// Number of function CFGs built and analyzed. + unsigned NumFunctionsAnalyzed; + + /// Number of functions for which the CFG could not be successfully + /// built. + unsigned NumFunctionsWithBadCFGs; + + /// Total number of blocks across all CFGs. + unsigned NumCFGBlocks; + + /// Largest number of CFG blocks for a single function analyzed. + unsigned MaxCFGBlocksPerFunction; + + /// Total number of CFGs with variables analyzed for uninitialized + /// uses. + unsigned NumUninitAnalysisFunctions; + + /// Total number of variables analyzed for uninitialized uses. + unsigned NumUninitAnalysisVariables; + + /// Max number of variables analyzed for uninitialized uses in a single + /// function. + unsigned MaxUninitAnalysisVariablesPerFunction; + + /// Total number of block visits during uninitialized use analysis. + unsigned NumUninitAnalysisBlockVisits; + + /// Max number of block visits during uninitialized use analysis of + /// a single function. + unsigned MaxUninitAnalysisBlockVisitsPerFunction; + + /// @} + +public: + AnalysisBasedWarnings(Sema &s); + + void IssueWarnings(Policy P, FunctionScopeInfo *fscope, + const Decl *D, const BlockExpr *blkExpr); + + Policy getDefaultPolicy() { return DefaultPolicy; } + + void PrintStats() const; +}; + +}} // end namespace clang::sema + +#endif |
