123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //=- 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"
- #include <memory>
- namespace clang {
- class Decl;
- class FunctionDecl;
- 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;
- class InterProceduralData;
- std::unique_ptr<InterProceduralData> IPData;
- 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);
- ~AnalysisBasedWarnings();
- void IssueWarnings(Policy P, FunctionScopeInfo *fscope,
- const Decl *D, QualType BlockType);
- Policy getDefaultPolicy() { return DefaultPolicy; }
- void PrintStats() const;
- };
- } // namespace sema
- } // namespace clang
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|