Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

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