Coverage Report

Created: 2018-07-22 10:17

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h
Line
Count
Source (jump to first uncovered line)
1
//===- CheckerManager.h - Static Analyzer Checker Manager -------*- C++ -*-===//
2
//
3
//                     The LLVM Compiler Infrastructure
4
//
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
7
//
8
//===----------------------------------------------------------------------===//
9
//
10
// Defines the Static Analyzer Checker Manager.
11
//
12
//===----------------------------------------------------------------------===//
13
14
#ifndef LLVM_CLANG_STATICANALYZER_CORE_CHECKERMANAGER_H
15
#define LLVM_CLANG_STATICANALYZER_CORE_CHECKERMANAGER_H
16
17
#include "clang/Analysis/ProgramPoint.h"
18
#include "clang/Basic/LangOptions.h"
19
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState_Fwd.h"
20
#include "clang/StaticAnalyzer/Core/PathSensitive/Store.h"
21
#include "llvm/ADT/ArrayRef.h"
22
#include "llvm/ADT/DenseMap.h"
23
#include "llvm/ADT/SmallVector.h"
24
#include "llvm/ADT/StringRef.h"
25
#include <vector>
26
27
namespace clang {
28
29
class AnalyzerOptions;
30
class CallExpr;
31
class CXXNewExpr;
32
class Decl;
33
class LocationContext;
34
class Stmt;
35
class TranslationUnitDecl;
36
37
namespace ento {
38
39
class AnalysisManager;
40
class BugReporter;
41
class CallEvent;
42
class CheckerBase;
43
class CheckerContext;
44
class CheckerRegistry;
45
class ExplodedGraph;
46
class ExplodedNode;
47
class ExplodedNodeSet;
48
class ExprEngine;
49
class MemRegion;
50
struct NodeBuilderContext;
51
class ObjCMethodCall;
52
class RegionAndSymbolInvalidationTraits;
53
class SVal;
54
class SymbolReaper;
55
56
template <typename T> class CheckerFn;
57
58
template <typename RET, typename... Ps>
59
class CheckerFn<RET(Ps...)> {
60
  using Func = RET (*)(void *, Ps...);
61
62
  Func Fn;
63
64
public:
65
  CheckerBase *Checker;
66
67
34.6k
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void ()>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*))
Line
Count
Source
67
10.8k
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::Stmt const*, clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::Stmt const*, clang::ento::CheckerContext&))
Line
Count
Source
67
9.29k
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::ento::CallEvent const&, clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::ento::CallEvent const&, clang::ento::CheckerContext&))
Line
Count
Source
67
3.73k
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::CXXNewExpr const*, clang::ento::SVal, clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::CXXNewExpr const*, clang::ento::SVal, clang::ento::CheckerContext&))
Line
Count
Source
67
148
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::ento::SVal const&, clang::ento::SVal const&, clang::Stmt const*, clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::ento::SVal const&, clang::ento::SVal const&, clang::Stmt const*, clang::ento::CheckerContext&))
Line
Count
Source
67
1.29k
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const> (llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, llvm::DenseSet<clang::ento::SymExpr const*, llvm::DenseMapInfo<clang::ento::SymExpr const*> > const*, llvm::ArrayRef<clang::ento::MemRegion const*>, llvm::ArrayRef<clang::ento::MemRegion const*>, clang::LocationContext const*, clang::ento::CallEvent const*)>::CheckerFn(clang::ento::CheckerBase*, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const> (*)(void*, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, llvm::DenseSet<clang::ento::SymExpr const*, llvm::DenseMapInfo<clang::ento::SymExpr const*> > const*, llvm::ArrayRef<clang::ento::MemRegion const*>, llvm::ArrayRef<clang::ento::MemRegion const*>, clang::LocationContext const*, clang::ento::CallEvent const*))
Line
Count
Source
67
227
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SymbolReaper&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SymbolReaper&))
Line
Count
Source
67
164
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::ento::ExplodedGraph&, clang::ento::BugReporter&, clang::ento::ExprEngine&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::ento::ExplodedGraph&, clang::ento::BugReporter&, clang::ento::ExprEngine&))
Line
Count
Source
67
275
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::ento::SVal const&, bool, clang::Stmt const*, clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::ento::SVal const&, bool, clang::Stmt const*, clang::ento::CheckerContext&))
Line
Count
Source
67
1.30k
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::ento::ObjCMethodCall const&, clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::ento::ObjCMethodCall const&, clang::ento::CheckerContext&))
Line
Count
Source
67
3.08k
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::ento::SymbolReaper&, clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::ento::SymbolReaper&, clang::ento::CheckerContext&))
Line
Count
Source
67
1.25k
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const> (llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, llvm::DenseSet<clang::ento::SymExpr const*, llvm::DenseMapInfo<clang::ento::SymExpr const*> > const&, clang::ento::CallEvent const*, clang::ento::PointerEscapeKind, clang::ento::RegionAndSymbolInvalidationTraits*)>::CheckerFn(clang::ento::CheckerBase*, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const> (*)(void*, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, llvm::DenseSet<clang::ento::SymExpr const*, llvm::DenseMapInfo<clang::ento::SymExpr const*> > const&, clang::ento::CallEvent const*, clang::ento::PointerEscapeKind, clang::ento::RegionAndSymbolInvalidationTraits*))
Line
Count
Source
67
334
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<bool (clang::CallExpr const*, clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, bool (*)(void*, clang::CallExpr const*, clang::ento::CheckerContext&))
Line
Count
Source
67
1.01k
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::Decl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::Decl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&))
Line
Count
Source
67
525
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::ento::CheckerContext&))
Line
Count
Source
67
95
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::ReturnStmt const*, clang::ento::CheckerContext&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::ReturnStmt const*, clang::ento::CheckerContext&))
Line
Count
Source
67
715
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const> (llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SVal const&, bool)>::CheckerFn(clang::ento::CheckerBase*, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const> (*)(void*, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SVal const&, bool))
Line
Count
Source
67
241
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (clang::TranslationUnitDecl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, clang::TranslationUnitDecl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&))
Line
Count
Source
67
30
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
clang::ento::CheckerFn<void (void const*)>::CheckerFn(clang::ento::CheckerBase*, void (*)(void*, void const*))
Line
Count
Source
67
25
  CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) {}
68
69
2.43M
  RET operator()(Ps... ps) const {
70
2.43M
    return Fn(Checker, ps...);
71
2.43M
  }
clang::ento::CheckerFn<void (void const*)>::operator()(void const*) const
Line
Count
Source
69
12
  RET operator()(Ps... ps) const {
70
12
    return Fn(Checker, ps...);
71
12
  }
clang::ento::CheckerFn<void (clang::Decl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&)>::operator()(clang::Decl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&) const
Line
Count
Source
69
6.76k
  RET operator()(Ps... ps) const {
70
6.76k
    return Fn(Checker, ps...);
71
6.76k
  }
clang::ento::CheckerFn<void (clang::Stmt const*, clang::ento::CheckerContext&)>::operator()(clang::Stmt const*, clang::ento::CheckerContext&) const
Line
Count
Source
69
944k
  RET operator()(Ps... ps) const {
70
944k
    return Fn(Checker, ps...);
71
944k
  }
clang::ento::CheckerFn<void (clang::ento::ObjCMethodCall const&, clang::ento::CheckerContext&)>::operator()(clang::ento::ObjCMethodCall const&, clang::ento::CheckerContext&) const
Line
Count
Source
69
15.7k
  RET operator()(Ps... ps) const {
70
15.7k
    return Fn(Checker, ps...);
71
15.7k
  }
clang::ento::CheckerFn<void (clang::ento::CallEvent const&, clang::ento::CheckerContext&)>::operator()(clang::ento::CallEvent const&, clang::ento::CheckerContext&) const
Line
Count
Source
69
376k
  RET operator()(Ps... ps) const {
70
376k
    return Fn(Checker, ps...);
71
376k
  }
clang::ento::CheckerFn<void (clang::ento::SVal const&, bool, clang::Stmt const*, clang::ento::CheckerContext&)>::operator()(clang::ento::SVal const&, bool, clang::Stmt const*, clang::ento::CheckerContext&) const
Line
Count
Source
69
411k
  RET operator()(Ps... ps) const {
70
411k
    return Fn(Checker, ps...);
71
411k
  }
clang::ento::CheckerFn<void (clang::ento::SVal const&, clang::ento::SVal const&, clang::Stmt const*, clang::ento::CheckerContext&)>::operator()(clang::ento::SVal const&, clang::ento::SVal const&, clang::Stmt const*, clang::ento::CheckerContext&) const
Line
Count
Source
69
115k
  RET operator()(Ps... ps) const {
70
115k
    return Fn(Checker, ps...);
71
115k
  }
clang::ento::CheckerFn<void (clang::ento::ExplodedGraph&, clang::ento::BugReporter&, clang::ento::ExprEngine&)>::operator()(clang::ento::ExplodedGraph&, clang::ento::BugReporter&, clang::ento::ExprEngine&) const
Line
Count
Source
69
5.51k
  RET operator()(Ps... ps) const {
70
5.51k
    return Fn(Checker, ps...);
71
5.51k
  }
clang::ento::CheckerFn<void (clang::ento::CheckerContext&)>::operator()(clang::ento::CheckerContext&) const
Line
Count
Source
69
4.90k
  RET operator()(Ps... ps) const {
70
4.90k
    return Fn(Checker, ps...);
71
4.90k
  }
clang::ento::CheckerFn<void (clang::ReturnStmt const*, clang::ento::CheckerContext&)>::operator()(clang::ReturnStmt const*, clang::ento::CheckerContext&) const
Line
Count
Source
69
45.5k
  RET operator()(Ps... ps) const {
70
45.5k
    return Fn(Checker, ps...);
71
45.5k
  }
clang::ento::CheckerFn<void (clang::CXXNewExpr const*, clang::ento::SVal, clang::ento::CheckerContext&)>::operator()(clang::CXXNewExpr const*, clang::ento::SVal, clang::ento::CheckerContext&) const
Line
Count
Source
69
573
  RET operator()(Ps... ps) const {
70
573
    return Fn(Checker, ps...);
71
573
  }
clang::ento::CheckerFn<void (llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SymbolReaper&)>::operator()(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SymbolReaper&) const
Line
Count
Source
69
96.6k
  RET operator()(Ps... ps) const {
70
96.6k
    return Fn(Checker, ps...);
71
96.6k
  }
clang::ento::CheckerFn<void (clang::ento::SymbolReaper&, clang::ento::CheckerContext&)>::operator()(clang::ento::SymbolReaper&, clang::ento::CheckerContext&) const
Line
Count
Source
69
99.6k
  RET operator()(Ps... ps) const {
70
99.6k
    return Fn(Checker, ps...);
71
99.6k
  }
clang::ento::CheckerFn<llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const> (llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, llvm::DenseSet<clang::ento::SymExpr const*, llvm::DenseMapInfo<clang::ento::SymExpr const*> > const*, llvm::ArrayRef<clang::ento::MemRegion const*>, llvm::ArrayRef<clang::ento::MemRegion const*>, clang::LocationContext const*, clang::ento::CallEvent const*)>::operator()(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, llvm::DenseSet<clang::ento::SymExpr const*, llvm::DenseMapInfo<clang::ento::SymExpr const*> > const*, llvm::ArrayRef<clang::ento::MemRegion const*>, llvm::ArrayRef<clang::ento::MemRegion const*>, clang::LocationContext const*, clang::ento::CallEvent const*) const
Line
Count
Source
69
57.1k
  RET operator()(Ps... ps) const {
70
57.1k
    return Fn(Checker, ps...);
71
57.1k
  }
clang::ento::CheckerFn<llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const> (llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, llvm::DenseSet<clang::ento::SymExpr const*, llvm::DenseMapInfo<clang::ento::SymExpr const*> > const&, clang::ento::CallEvent const*, clang::ento::PointerEscapeKind, clang::ento::RegionAndSymbolInvalidationTraits*)>::operator()(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, llvm::DenseSet<clang::ento::SymExpr const*, llvm::DenseMapInfo<clang::ento::SymExpr const*> > const&, clang::ento::CallEvent const*, clang::ento::PointerEscapeKind, clang::ento::RegionAndSymbolInvalidationTraits*) const
Line
Count
Source
69
20.3k
  RET operator()(Ps... ps) const {
70
20.3k
    return Fn(Checker, ps...);
71
20.3k
  }
clang::ento::CheckerFn<llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const> (llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SVal const&, bool)>::operator()(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SVal const&, bool) const
Line
Count
Source
69
160k
  RET operator()(Ps... ps) const {
70
160k
    return Fn(Checker, ps...);
71
160k
  }
clang::ento::CheckerFn<bool (clang::CallExpr const*, clang::ento::CheckerContext&)>::operator()(clang::CallExpr const*, clang::ento::CheckerContext&) const
Line
Count
Source
69
66.8k
  RET operator()(Ps... ps) const {
70
66.8k
    return Fn(Checker, ps...);
71
66.8k
  }
clang::ento::CheckerFn<void (clang::TranslationUnitDecl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&)>::operator()(clang::TranslationUnitDecl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&) const
Line
Count
Source
69
30
  RET operator()(Ps... ps) const {
70
30
    return Fn(Checker, ps...);
71
30
  }
clang::ento::CheckerFn<void ()>::operator()() const
Line
Count
Source
69
10.8k
  RET operator()(Ps... ps) const {
70
10.8k
    return Fn(Checker, ps...);
71
10.8k
  }
72
};
73
74
/// Describes the different reasons a pointer escapes
75
/// during analysis.
76
enum PointerEscapeKind {
77
  /// A pointer escapes due to binding its value to a location
78
  /// that the analyzer cannot track.
79
  PSK_EscapeOnBind,
80
81
  /// The pointer has been passed to a function call directly.
82
  PSK_DirectEscapeOnCall,
83
84
  /// The pointer has been passed to a function indirectly.
85
  /// For example, the pointer is accessible through an
86
  /// argument to a function.
87
  PSK_IndirectEscapeOnCall,
88
89
  /// The reason for pointer escape is unknown. For example, 
90
  /// a region containing this pointer is invalidated.
91
  PSK_EscapeOther
92
};
93
94
// This wrapper is used to ensure that only StringRefs originating from the
95
// CheckerRegistry are used as check names. We want to make sure all check
96
// name strings have a lifetime that keeps them alive at least until the path
97
// diagnostics have been processed.
98
0
class CheckName {
99
  friend class ::clang::ento::CheckerRegistry;
100
101
  StringRef Name;
102
103
11.2k
  explicit CheckName(StringRef Name) : Name(Name) {}
104
105
public:
106
14.1k
  CheckName() = default;
107
108
12.9k
  StringRef getName() const { return Name; }
109
};
110
111
enum class ObjCMessageVisitKind {
112
  Pre,
113
  Post,
114
  MessageNil
115
};
116
117
class CheckerManager {
118
  const LangOptions LangOpts;
119
  AnalyzerOptions &AOptions;
120
  CheckName CurrentCheckName;
121
122
public:
123
  CheckerManager(const LangOptions &langOpts, AnalyzerOptions &AOptions)
124
740
      : LangOpts(langOpts), AOptions(AOptions) {}
125
126
  ~CheckerManager();
127
128
11.2k
  void setCurrentCheckName(CheckName name) { CurrentCheckName = name; }
129
1.12k
  CheckName getCurrentCheckName() const { return CurrentCheckName; }
130
131
  bool hasPathSensitiveCheckers() const;
132
133
  void finishedCheckerRegistration();
134
135
141
  const LangOptions &getLangOpts() const { return LangOpts; }
136
360
  AnalyzerOptions &getAnalyzerOptions() { return AOptions; }
137
138
  using CheckerRef = CheckerBase *;
139
  using CheckerTag = const void *;
140
  using CheckerDtor = CheckerFn<void ()>;
141
142
//===----------------------------------------------------------------------===//
143
// registerChecker
144
//===----------------------------------------------------------------------===//
145
146
  /// Used to register checkers.
147
  /// All arguments are automatically passed through to the checker
148
  /// constructor.
149
  ///
150
  /// \returns a pointer to the checker object.
151
  template <typename CHECKER, typename... AT>
152
11.4k
  CHECKER *registerChecker(AT... Args) {
153
11.4k
    CheckerTag tag = getTag<CHECKER>();
154
11.4k
    CheckerRef &ref = CheckerTags[tag];
155
11.4k
    if (ref)
156
540
      return static_cast<CHECKER *>(ref); // already registered.
157
10.8k
158
10.8k
    CHECKER *checker = new CHECKER(Args...);
159
10.8k
    checker->Name = CurrentCheckName;
160
10.8k
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
10.8k
    CHECKER::_register(checker, *this);
162
10.8k
    ref = checker;
163
10.8k
    return checker;
164
10.8k
  }
AnalysisOrderChecker.cpp:(anonymous namespace)::AnalysisOrderChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::AnalysisOrderChecker>()
Line
Count
Source
152
6
  CHECKER *registerChecker(AT... Args) {
153
6
    CheckerTag tag = getTag<CHECKER>();
154
6
    CheckerRef &ref = CheckerTags[tag];
155
6
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
6
158
6
    CHECKER *checker = new CHECKER(Args...);
159
6
    checker->Name = CurrentCheckName;
160
6
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
6
    CHECKER::_register(checker, *this);
162
6
    ref = checker;
163
6
    return checker;
164
6
  }
AnalyzerStatsChecker.cpp:(anonymous namespace)::AnalyzerStatsChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::AnalyzerStatsChecker>()
Line
Count
Source
152
2
  CHECKER *registerChecker(AT... Args) {
153
2
    CheckerTag tag = getTag<CHECKER>();
154
2
    CheckerRef &ref = CheckerTags[tag];
155
2
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
2
158
2
    CHECKER *checker = new CHECKER(Args...);
159
2
    checker->Name = CurrentCheckName;
160
2
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
2
    CHECKER::_register(checker, *this);
162
2
    ref = checker;
163
2
    return checker;
164
2
  }
ArrayBoundChecker.cpp:(anonymous namespace)::ArrayBoundChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ArrayBoundChecker>()
Line
Count
Source
152
7
  CHECKER *registerChecker(AT... Args) {
153
7
    CheckerTag tag = getTag<CHECKER>();
154
7
    CheckerRef &ref = CheckerTags[tag];
155
7
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
7
158
7
    CHECKER *checker = new CHECKER(Args...);
159
7
    checker->Name = CurrentCheckName;
160
7
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
7
    CHECKER::_register(checker, *this);
162
7
    ref = checker;
163
7
    return checker;
164
7
  }
ArrayBoundCheckerV2.cpp:(anonymous namespace)::ArrayBoundCheckerV2* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ArrayBoundCheckerV2>()
Line
Count
Source
152
8
  CHECKER *registerChecker(AT... Args) {
153
8
    CheckerTag tag = getTag<CHECKER>();
154
8
    CheckerRef &ref = CheckerTags[tag];
155
8
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
8
158
8
    CHECKER *checker = new CHECKER(Args...);
159
8
    checker->Name = CurrentCheckName;
160
8
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
8
    CHECKER::_register(checker, *this);
162
8
    ref = checker;
163
8
    return checker;
164
8
  }
BasicObjCFoundationChecks.cpp:(anonymous namespace)::NilArgChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NilArgChecker>()
Line
Count
Source
152
20
  CHECKER *registerChecker(AT... Args) {
153
20
    CheckerTag tag = getTag<CHECKER>();
154
20
    CheckerRef &ref = CheckerTags[tag];
155
20
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
20
158
20
    CHECKER *checker = new CHECKER(Args...);
159
20
    checker->Name = CurrentCheckName;
160
20
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
20
    CHECKER::_register(checker, *this);
162
20
    ref = checker;
163
20
    return checker;
164
20
  }
BasicObjCFoundationChecks.cpp:(anonymous namespace)::CFNumberChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CFNumberChecker>()
Line
Count
Source
152
12
  CHECKER *registerChecker(AT... Args) {
153
12
    CheckerTag tag = getTag<CHECKER>();
154
12
    CheckerRef &ref = CheckerTags[tag];
155
12
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
12
158
12
    CHECKER *checker = new CHECKER(Args...);
159
12
    checker->Name = CurrentCheckName;
160
12
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
12
    CHECKER::_register(checker, *this);
162
12
    ref = checker;
163
12
    return checker;
164
12
  }
BasicObjCFoundationChecks.cpp:(anonymous namespace)::CFRetainReleaseChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CFRetainReleaseChecker>()
Line
Count
Source
152
23
  CHECKER *registerChecker(AT... Args) {
153
23
    CheckerTag tag = getTag<CHECKER>();
154
23
    CheckerRef &ref = CheckerTags[tag];
155
23
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
23
158
23
    CHECKER *checker = new CHECKER(Args...);
159
23
    checker->Name = CurrentCheckName;
160
23
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
23
    CHECKER::_register(checker, *this);
162
23
    ref = checker;
163
23
    return checker;
164
23
  }
BasicObjCFoundationChecks.cpp:(anonymous namespace)::ClassReleaseChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ClassReleaseChecker>()
Line
Count
Source
152
23
  CHECKER *registerChecker(AT... Args) {
153
23
    CheckerTag tag = getTag<CHECKER>();
154
23
    CheckerRef &ref = CheckerTags[tag];
155
23
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
23
158
23
    CHECKER *checker = new CHECKER(Args...);
159
23
    checker->Name = CurrentCheckName;
160
23
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
23
    CHECKER::_register(checker, *this);
162
23
    ref = checker;
163
23
    return checker;
164
23
  }
BasicObjCFoundationChecks.cpp:(anonymous namespace)::VariadicMethodTypeChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::VariadicMethodTypeChecker>()
Line
Count
Source
152
14
  CHECKER *registerChecker(AT... Args) {
153
14
    CheckerTag tag = getTag<CHECKER>();
154
14
    CheckerRef &ref = CheckerTags[tag];
155
14
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
14
158
14
    CHECKER *checker = new CHECKER(Args...);
159
14
    checker->Name = CurrentCheckName;
160
14
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
14
    CHECKER::_register(checker, *this);
162
14
    ref = checker;
163
14
    return checker;
164
14
  }
BasicObjCFoundationChecks.cpp:(anonymous namespace)::ObjCLoopChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCLoopChecker>()
Line
Count
Source
152
15
  CHECKER *registerChecker(AT... Args) {
153
15
    CheckerTag tag = getTag<CHECKER>();
154
15
    CheckerRef &ref = CheckerTags[tag];
155
15
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
15
158
15
    CHECKER *checker = new CHECKER(Args...);
159
15
    checker->Name = CurrentCheckName;
160
15
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
15
    CHECKER::_register(checker, *this);
162
15
    ref = checker;
163
15
    return checker;
164
15
  }
BasicObjCFoundationChecks.cpp:(anonymous namespace)::ObjCNonNilReturnValueChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCNonNilReturnValueChecker>()
Line
Count
Source
152
16
  CHECKER *registerChecker(AT... Args) {
153
16
    CheckerTag tag = getTag<CHECKER>();
154
16
    CheckerRef &ref = CheckerTags[tag];
155
16
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
16
158
16
    CHECKER *checker = new CHECKER(Args...);
159
16
    checker->Name = CurrentCheckName;
160
16
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
16
    CHECKER::_register(checker, *this);
162
16
    ref = checker;
163
16
    return checker;
164
16
  }
BlockInCriticalSectionChecker.cpp:(anonymous namespace)::BlockInCriticalSectionChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::BlockInCriticalSectionChecker>()
Line
Count
Source
152
6
  CHECKER *registerChecker(AT... Args) {
153
6
    CheckerTag tag = getTag<CHECKER>();
154
6
    CheckerRef &ref = CheckerTags[tag];
155
6
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
6
158
6
    CHECKER *checker = new CHECKER(Args...);
159
6
    checker->Name = CurrentCheckName;
160
6
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
6
    CHECKER::_register(checker, *this);
162
6
    ref = checker;
163
6
    return checker;
164
6
  }
BoolAssignmentChecker.cpp:(anonymous namespace)::BoolAssignmentChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::BoolAssignmentChecker>()
Line
Count
Source
152
67
  CHECKER *registerChecker(AT... Args) {
153
67
    CheckerTag tag = getTag<CHECKER>();
154
67
    CheckerRef &ref = CheckerTags[tag];
155
67
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
67
158
67
    CHECKER *checker = new CHECKER(Args...);
159
67
    checker->Name = CurrentCheckName;
160
67
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
67
    CHECKER::_register(checker, *this);
162
67
    ref = checker;
163
67
    return checker;
164
67
  }
BuiltinFunctionChecker.cpp:(anonymous namespace)::BuiltinFunctionChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::BuiltinFunctionChecker>()
Line
Count
Source
152
560
  CHECKER *registerChecker(AT... Args) {
153
560
    CheckerTag tag = getTag<CHECKER>();
154
560
    CheckerRef &ref = CheckerTags[tag];
155
560
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
560
158
560
    CHECKER *checker = new CHECKER(Args...);
159
560
    checker->Name = CurrentCheckName;
160
560
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
560
    CHECKER::_register(checker, *this);
162
560
    ref = checker;
163
560
    return checker;
164
560
  }
CStringChecker.cpp:(anonymous namespace)::CStringChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CStringChecker>()
Line
Count
Source
152
312
  CHECKER *registerChecker(AT... Args) {
153
312
    CheckerTag tag = getTag<CHECKER>();
154
312
    CheckerRef &ref = CheckerTags[tag];
155
312
    if (ref)
156
158
      return static_cast<CHECKER *>(ref); // already registered.
157
154
158
154
    CHECKER *checker = new CHECKER(Args...);
159
154
    checker->Name = CurrentCheckName;
160
154
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
154
    CHECKER::_register(checker, *this);
162
154
    ref = checker;
163
154
    return checker;
164
154
  }
CStringSyntaxChecker.cpp:(anonymous namespace)::CStringSyntaxChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CStringSyntaxChecker>()
Line
Count
Source
152
43
  CHECKER *registerChecker(AT... Args) {
153
43
    CheckerTag tag = getTag<CHECKER>();
154
43
    CheckerRef &ref = CheckerTags[tag];
155
43
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
43
158
43
    CHECKER *checker = new CHECKER(Args...);
159
43
    checker->Name = CurrentCheckName;
160
43
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
43
    CHECKER::_register(checker, *this);
162
43
    ref = checker;
163
43
    return checker;
164
43
  }
CallAndMessageChecker.cpp:(anonymous namespace)::CallAndMessageChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CallAndMessageChecker>()
Line
Count
Source
152
616
  CHECKER *registerChecker(AT... Args) {
153
616
    CheckerTag tag = getTag<CHECKER>();
154
616
    CheckerRef &ref = CheckerTags[tag];
155
616
    if (ref)
156
68
      return static_cast<CHECKER *>(ref); // already registered.
157
548
158
548
    CHECKER *checker = new CHECKER(Args...);
159
548
    checker->Name = CurrentCheckName;
160
548
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
548
    CHECKER::_register(checker, *this);
162
548
    ref = checker;
163
548
    return checker;
164
548
  }
CastSizeChecker.cpp:(anonymous namespace)::CastSizeChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CastSizeChecker>()
Line
Count
Source
152
58
  CHECKER *registerChecker(AT... Args) {
153
58
    CheckerTag tag = getTag<CHECKER>();
154
58
    CheckerRef &ref = CheckerTags[tag];
155
58
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
58
158
58
    CHECKER *checker = new CHECKER(Args...);
159
58
    checker->Name = CurrentCheckName;
160
58
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
58
    CHECKER::_register(checker, *this);
162
58
    ref = checker;
163
58
    return checker;
164
58
  }
CastToStructChecker.cpp:(anonymous namespace)::CastToStructChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CastToStructChecker>()
Line
Count
Source
152
71
  CHECKER *registerChecker(AT... Args) {
153
71
    CheckerTag tag = getTag<CHECKER>();
154
71
    CheckerRef &ref = CheckerTags[tag];
155
71
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
71
158
71
    CHECKER *checker = new CHECKER(Args...);
159
71
    checker->Name = CurrentCheckName;
160
71
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
71
    CHECKER::_register(checker, *this);
162
71
    ref = checker;
163
71
    return checker;
164
71
  }
CheckObjCDealloc.cpp:(anonymous namespace)::ObjCDeallocChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCDeallocChecker>()
Line
Count
Source
152
18
  CHECKER *registerChecker(AT... Args) {
153
18
    CheckerTag tag = getTag<CHECKER>();
154
18
    CheckerRef &ref = CheckerTags[tag];
155
18
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
18
158
18
    CHECKER *checker = new CHECKER(Args...);
159
18
    checker->Name = CurrentCheckName;
160
18
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
18
    CHECKER::_register(checker, *this);
162
18
    ref = checker;
163
18
    return checker;
164
18
  }
CheckObjCInstMethSignature.cpp:(anonymous namespace)::ObjCMethSigsChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCMethSigsChecker>()
Line
Count
Source
152
15
  CHECKER *registerChecker(AT... Args) {
153
15
    CheckerTag tag = getTag<CHECKER>();
154
15
    CheckerRef &ref = CheckerTags[tag];
155
15
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
15
158
15
    CHECKER *checker = new CHECKER(Args...);
159
15
    checker->Name = CurrentCheckName;
160
15
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
15
    CHECKER::_register(checker, *this);
162
15
    ref = checker;
163
15
    return checker;
164
15
  }
CheckSecuritySyntaxOnly.cpp:(anonymous namespace)::SecuritySyntaxChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::SecuritySyntaxChecker>()
Line
Count
Source
152
116
  CHECKER *registerChecker(AT... Args) {
153
116
    CheckerTag tag = getTag<CHECKER>();
154
116
    CheckerRef &ref = CheckerTags[tag];
155
116
    if (ref)
156
104
      return static_cast<CHECKER *>(ref); // already registered.
157
12
158
12
    CHECKER *checker = new CHECKER(Args...);
159
12
    checker->Name = CurrentCheckName;
160
12
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
12
    CHECKER::_register(checker, *this);
162
12
    ref = checker;
163
12
    return checker;
164
12
  }
CheckSizeofPointer.cpp:(anonymous namespace)::SizeofPointerChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::SizeofPointerChecker>()
Line
Count
Source
152
66
  CHECKER *registerChecker(AT... Args) {
153
66
    CheckerTag tag = getTag<CHECKER>();
154
66
    CheckerRef &ref = CheckerTags[tag];
155
66
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
66
158
66
    CHECKER *checker = new CHECKER(Args...);
159
66
    checker->Name = CurrentCheckName;
160
66
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
66
    CHECKER::_register(checker, *this);
162
66
    ref = checker;
163
66
    return checker;
164
66
  }
ChrootChecker.cpp:(anonymous namespace)::ChrootChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ChrootChecker>()
Line
Count
Source
152
5
  CHECKER *registerChecker(AT... Args) {
153
5
    CheckerTag tag = getTag<CHECKER>();
154
5
    CheckerRef &ref = CheckerTags[tag];
155
5
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
5
158
5
    CHECKER *checker = new CHECKER(Args...);
159
5
    checker->Name = CurrentCheckName;
160
5
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
5
    CHECKER::_register(checker, *this);
162
5
    ref = checker;
163
5
    return checker;
164
5
  }
CloneChecker.cpp:(anonymous namespace)::CloneChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CloneChecker>()
Line
Count
Source
152
28
  CHECKER *registerChecker(AT... Args) {
153
28
    CheckerTag tag = getTag<CHECKER>();
154
28
    CheckerRef &ref = CheckerTags[tag];
155
28
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
28
158
28
    CHECKER *checker = new CHECKER(Args...);
159
28
    checker->Name = CurrentCheckName;
160
28
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
28
    CHECKER::_register(checker, *this);
162
28
    ref = checker;
163
28
    return checker;
164
28
  }
ConversionChecker.cpp:(anonymous namespace)::ConversionChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ConversionChecker>()
Line
Count
Source
152
66
  CHECKER *registerChecker(AT... Args) {
153
66
    CheckerTag tag = getTag<CHECKER>();
154
66
    CheckerRef &ref = CheckerTags[tag];
155
66
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
66
158
66
    CHECKER *checker = new CHECKER(Args...);
159
66
    checker->Name = CurrentCheckName;
160
66
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
66
    CHECKER::_register(checker, *this);
162
66
    ref = checker;
163
66
    return checker;
164
66
  }
CXXSelfAssignmentChecker.cpp:(anonymous namespace)::CXXSelfAssignmentChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CXXSelfAssignmentChecker>()
Line
Count
Source
152
7
  CHECKER *registerChecker(AT... Args) {
153
7
    CheckerTag tag = getTag<CHECKER>();
154
7
    CheckerRef &ref = CheckerTags[tag];
155
7
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
7
158
7
    CHECKER *checker = new CHECKER(Args...);
159
7
    checker->Name = CurrentCheckName;
160
7
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
7
    CHECKER::_register(checker, *this);
162
7
    ref = checker;
163
7
    return checker;
164
7
  }
DeadStoresChecker.cpp:(anonymous namespace)::DeadStoresChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::DeadStoresChecker>()
Line
Count
Source
152
23
  CHECKER *registerChecker(AT... Args) {
153
23
    CheckerTag tag = getTag<CHECKER>();
154
23
    CheckerRef &ref = CheckerTags[tag];
155
23
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
23
158
23
    CHECKER *checker = new CHECKER(Args...);
159
23
    checker->Name = CurrentCheckName;
160
23
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
23
    CHECKER::_register(checker, *this);
162
23
    ref = checker;
163
23
    return checker;
164
23
  }
DebugCheckers.cpp:(anonymous namespace)::DominatorsTreeDumper* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::DominatorsTreeDumper>()
Line
Count
Source
152
1
  CHECKER *registerChecker(AT... Args) {
153
1
    CheckerTag tag = getTag<CHECKER>();
154
1
    CheckerRef &ref = CheckerTags[tag];
155
1
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
1
158
1
    CHECKER *checker = new CHECKER(Args...);
159
1
    checker->Name = CurrentCheckName;
160
1
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
1
    CHECKER::_register(checker, *this);
162
1
    ref = checker;
163
1
    return checker;
164
1
  }
Unexecuted instantiation: DebugCheckers.cpp:(anonymous namespace)::LiveVariablesDumper* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::LiveVariablesDumper>()
Unexecuted instantiation: DebugCheckers.cpp:(anonymous namespace)::CFGViewer* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CFGViewer>()
DebugCheckers.cpp:(anonymous namespace)::CFGDumper* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CFGDumper>()
Line
Count
Source
152
26
  CHECKER *registerChecker(AT... Args) {
153
26
    CheckerTag tag = getTag<CHECKER>();
154
26
    CheckerRef &ref = CheckerTags[tag];
155
26
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
26
158
26
    CHECKER *checker = new CHECKER(Args...);
159
26
    checker->Name = CurrentCheckName;
160
26
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
26
    CHECKER::_register(checker, *this);
162
26
    ref = checker;
163
26
    return checker;
164
26
  }
Unexecuted instantiation: DebugCheckers.cpp:(anonymous namespace)::CallGraphViewer* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CallGraphViewer>()
DebugCheckers.cpp:(anonymous namespace)::CallGraphDumper* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CallGraphDumper>()
Line
Count
Source
152
1
  CHECKER *registerChecker(AT... Args) {
153
1
    CheckerTag tag = getTag<CHECKER>();
154
1
    CheckerRef &ref = CheckerTags[tag];
155
1
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
1
158
1
    CHECKER *checker = new CHECKER(Args...);
159
1
    checker->Name = CurrentCheckName;
160
1
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
1
    CHECKER::_register(checker, *this);
162
1
    ref = checker;
163
1
    return checker;
164
1
  }
DebugCheckers.cpp:(anonymous namespace)::ConfigDumper* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ConfigDumper>()
Line
Count
Source
152
2
  CHECKER *registerChecker(AT... Args) {
153
2
    CheckerTag tag = getTag<CHECKER>();
154
2
    CheckerRef &ref = CheckerTags[tag];
155
2
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
2
158
2
    CHECKER *checker = new CHECKER(Args...);
159
2
    checker->Name = CurrentCheckName;
160
2
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
2
    CHECKER::_register(checker, *this);
162
2
    ref = checker;
163
2
    return checker;
164
2
  }
Unexecuted instantiation: DebugCheckers.cpp:(anonymous namespace)::ExplodedGraphViewer* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ExplodedGraphViewer>()
DeleteWithNonVirtualDtorChecker.cpp:(anonymous namespace)::DeleteWithNonVirtualDtorChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::DeleteWithNonVirtualDtorChecker>()
Line
Count
Source
152
2
  CHECKER *registerChecker(AT... Args) {
153
2
    CheckerTag tag = getTag<CHECKER>();
154
2
    CheckerRef &ref = CheckerTags[tag];
155
2
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
2
158
2
    CHECKER *checker = new CHECKER(Args...);
159
2
    checker->Name = CurrentCheckName;
160
2
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
2
    CHECKER::_register(checker, *this);
162
2
    ref = checker;
163
2
    return checker;
164
2
  }
DereferenceChecker.cpp:(anonymous namespace)::DereferenceChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::DereferenceChecker>()
Line
Count
Source
152
558
  CHECKER *registerChecker(AT... Args) {
153
558
    CheckerTag tag = getTag<CHECKER>();
154
558
    CheckerRef &ref = CheckerTags[tag];
155
558
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
558
158
558
    CHECKER *checker = new CHECKER(Args...);
159
558
    checker->Name = CurrentCheckName;
160
558
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
558
    CHECKER::_register(checker, *this);
162
558
    ref = checker;
163
558
    return checker;
164
558
  }
DirectIvarAssignment.cpp:(anonymous namespace)::DirectIvarAssignment* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::DirectIvarAssignment>()
Line
Count
Source
152
4
  CHECKER *registerChecker(AT... Args) {
153
4
    CheckerTag tag = getTag<CHECKER>();
154
4
    CheckerRef &ref = CheckerTags[tag];
155
4
    if (ref)
156
1
      return static_cast<CHECKER *>(ref); // already registered.
157
3
158
3
    CHECKER *checker = new CHECKER(Args...);
159
3
    checker->Name = CurrentCheckName;
160
3
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
3
    CHECKER::_register(checker, *this);
162
3
    ref = checker;
163
3
    return checker;
164
3
  }
DivZeroChecker.cpp:(anonymous namespace)::DivZeroChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::DivZeroChecker>()
Line
Count
Source
152
557
  CHECKER *registerChecker(AT... Args) {
153
557
    CheckerTag tag = getTag<CHECKER>();
154
557
    CheckerRef &ref = CheckerTags[tag];
155
557
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
557
158
557
    CHECKER *checker = new CHECKER(Args...);
159
557
    checker->Name = CurrentCheckName;
160
557
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
557
    CHECKER::_register(checker, *this);
162
557
    ref = checker;
163
557
    return checker;
164
557
  }
DynamicTypePropagation.cpp:(anonymous namespace)::DynamicTypePropagation* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::DynamicTypePropagation>()
Line
Count
Source
152
567
  CHECKER *registerChecker(AT... Args) {
153
567
    CheckerTag tag = getTag<CHECKER>();
154
567
    CheckerRef &ref = CheckerTags[tag];
155
567
    if (ref)
156
16
      return static_cast<CHECKER *>(ref); // already registered.
157
551
158
551
    CHECKER *checker = new CHECKER(Args...);
159
551
    checker->Name = CurrentCheckName;
160
551
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
551
    CHECKER::_register(checker, *this);
162
551
    ref = checker;
163
551
    return checker;
164
551
  }
DynamicTypeChecker.cpp:(anonymous namespace)::DynamicTypeChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::DynamicTypeChecker>()
Line
Count
Source
152
68
  CHECKER *registerChecker(AT... Args) {
153
68
    CheckerTag tag = getTag<CHECKER>();
154
68
    CheckerRef &ref = CheckerTags[tag];
155
68
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
68
158
68
    CHECKER *checker = new CHECKER(Args...);
159
68
    checker->Name = CurrentCheckName;
160
68
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
68
    CHECKER::_register(checker, *this);
162
68
    ref = checker;
163
68
    return checker;
164
68
  }
ExprInspectionChecker.cpp:(anonymous namespace)::ExprInspectionChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ExprInspectionChecker>()
Line
Count
Source
152
200
  CHECKER *registerChecker(AT... Args) {
153
200
    CheckerTag tag = getTag<CHECKER>();
154
200
    CheckerRef &ref = CheckerTags[tag];
155
200
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
200
158
200
    CHECKER *checker = new CHECKER(Args...);
159
200
    checker->Name = CurrentCheckName;
160
200
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
200
    CHECKER::_register(checker, *this);
162
200
    ref = checker;
163
200
    return checker;
164
200
  }
FixedAddressChecker.cpp:(anonymous namespace)::FixedAddressChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::FixedAddressChecker>()
Line
Count
Source
152
67
  CHECKER *registerChecker(AT... Args) {
153
67
    CheckerTag tag = getTag<CHECKER>();
154
67
    CheckerRef &ref = CheckerTags[tag];
155
67
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
67
158
67
    CHECKER *checker = new CHECKER(Args...);
159
67
    checker->Name = CurrentCheckName;
160
67
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
67
    CHECKER::_register(checker, *this);
162
67
    ref = checker;
163
67
    return checker;
164
67
  }
GCDAntipatternChecker.cpp:(anonymous namespace)::GCDAntipatternChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::GCDAntipatternChecker>()
Line
Count
Source
152
4
  CHECKER *registerChecker(AT... Args) {
153
4
    CheckerTag tag = getTag<CHECKER>();
154
4
    CheckerRef &ref = CheckerTags[tag];
155
4
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
4
158
4
    CHECKER *checker = new CHECKER(Args...);
159
4
    checker->Name = CurrentCheckName;
160
4
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
4
    CHECKER::_register(checker, *this);
162
4
    ref = checker;
163
4
    return checker;
164
4
  }
GenericTaintChecker.cpp:(anonymous namespace)::GenericTaintChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::GenericTaintChecker>()
Line
Count
Source
152
11
  CHECKER *registerChecker(AT... Args) {
153
11
    CheckerTag tag = getTag<CHECKER>();
154
11
    CheckerRef &ref = CheckerTags[tag];
155
11
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
11
158
11
    CHECKER *checker = new CHECKER(Args...);
159
11
    checker->Name = CurrentCheckName;
160
11
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
11
    CHECKER::_register(checker, *this);
162
11
    ref = checker;
163
11
    return checker;
164
11
  }
GTestChecker.cpp:(anonymous namespace)::GTestChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::GTestChecker>()
Line
Count
Source
152
4
  CHECKER *registerChecker(AT... Args) {
153
4
    CheckerTag tag = getTag<CHECKER>();
154
4
    CheckerRef &ref = CheckerTags[tag];
155
4
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
4
158
4
    CHECKER *checker = new CHECKER(Args...);
159
4
    checker->Name = CurrentCheckName;
160
4
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
4
    CHECKER::_register(checker, *this);
162
4
    ref = checker;
163
4
    return checker;
164
4
  }
IdenticalExprChecker.cpp:(anonymous namespace)::FindIdenticalExprChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::FindIdenticalExprChecker>()
Line
Count
Source
152
66
  CHECKER *registerChecker(AT... Args) {
153
66
    CheckerTag tag = getTag<CHECKER>();
154
66
    CheckerRef &ref = CheckerTags[tag];
155
66
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
66
158
66
    CHECKER *checker = new CHECKER(Args...);
159
66
    checker->Name = CurrentCheckName;
160
66
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
66
    CHECKER::_register(checker, *this);
162
66
    ref = checker;
163
66
    return checker;
164
66
  }
InnerPointerChecker.cpp:(anonymous namespace)::InnerPointerChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::InnerPointerChecker>()
Line
Count
Source
152
2
  CHECKER *registerChecker(AT... Args) {
153
2
    CheckerTag tag = getTag<CHECKER>();
154
2
    CheckerRef &ref = CheckerTags[tag];
155
2
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
2
158
2
    CHECKER *checker = new CHECKER(Args...);
159
2
    checker->Name = CurrentCheckName;
160
2
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
2
    CHECKER::_register(checker, *this);
162
2
    ref = checker;
163
2
    return checker;
164
2
  }
IteratorChecker.cpp:(anonymous namespace)::IteratorChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::IteratorChecker>()
Line
Count
Source
152
4
  CHECKER *registerChecker(AT... Args) {
153
4
    CheckerTag tag = getTag<CHECKER>();
154
4
    CheckerRef &ref = CheckerTags[tag];
155
4
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
4
158
4
    CHECKER *checker = new CHECKER(Args...);
159
4
    checker->Name = CurrentCheckName;
160
4
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
4
    CHECKER::_register(checker, *this);
162
4
    ref = checker;
163
4
    return checker;
164
4
  }
IvarInvalidationChecker.cpp:(anonymous namespace)::IvarInvalidationChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::IvarInvalidationChecker>()
Line
Count
Source
152
4
  CHECKER *registerChecker(AT... Args) {
153
4
    CheckerTag tag = getTag<CHECKER>();
154
4
    CheckerRef &ref = CheckerTags[tag];
155
4
    if (ref)
156
1
      return static_cast<CHECKER *>(ref); // already registered.
157
3
158
3
    CHECKER *checker = new CHECKER(Args...);
159
3
    checker->Name = CurrentCheckName;
160
3
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
3
    CHECKER::_register(checker, *this);
162
3
    ref = checker;
163
3
    return checker;
164
3
  }
Unexecuted instantiation: LLVMConventionsChecker.cpp:(anonymous namespace)::LLVMConventionsChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::LLVMConventionsChecker>()
LocalizationChecker.cpp:(anonymous namespace)::NonLocalizedStringChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NonLocalizedStringChecker>()
Line
Count
Source
152
2
  CHECKER *registerChecker(AT... Args) {
153
2
    CheckerTag tag = getTag<CHECKER>();
154
2
    CheckerRef &ref = CheckerTags[tag];
155
2
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
2
158
2
    CHECKER *checker = new CHECKER(Args...);
159
2
    checker->Name = CurrentCheckName;
160
2
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
2
    CHECKER::_register(checker, *this);
162
2
    ref = checker;
163
2
    return checker;
164
2
  }
LocalizationChecker.cpp:(anonymous namespace)::EmptyLocalizationContextChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::EmptyLocalizationContextChecker>()
Line
Count
Source
152
1
  CHECKER *registerChecker(AT... Args) {
153
1
    CheckerTag tag = getTag<CHECKER>();
154
1
    CheckerRef &ref = CheckerTags[tag];
155
1
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
1
158
1
    CHECKER *checker = new CHECKER(Args...);
159
1
    checker->Name = CurrentCheckName;
160
1
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
1
    CHECKER::_register(checker, *this);
162
1
    ref = checker;
163
1
    return checker;
164
1
  }
LocalizationChecker.cpp:(anonymous namespace)::PluralMisuseChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::PluralMisuseChecker>()
Line
Count
Source
152
2
  CHECKER *registerChecker(AT... Args) {
153
2
    CheckerTag tag = getTag<CHECKER>();
154
2
    CheckerRef &ref = CheckerTags[tag];
155
2
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
2
158
2
    CHECKER *checker = new CHECKER(Args...);
159
2
    checker->Name = CurrentCheckName;
160
2
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
2
    CHECKER::_register(checker, *this);
162
2
    ref = checker;
163
2
    return checker;
164
2
  }
MacOSKeychainAPIChecker.cpp:(anonymous namespace)::MacOSKeychainAPIChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::MacOSKeychainAPIChecker>()
Line
Count
Source
152
13
  CHECKER *registerChecker(AT... Args) {
153
13
    CheckerTag tag = getTag<CHECKER>();
154
13
    CheckerRef &ref = CheckerTags[tag];
155
13
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
13
158
13
    CHECKER *checker = new CHECKER(Args...);
159
13
    checker->Name = CurrentCheckName;
160
13
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
13
    CHECKER::_register(checker, *this);
162
13
    ref = checker;
163
13
    return checker;
164
13
  }
MacOSXAPIChecker.cpp:(anonymous namespace)::MacOSXAPIChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::MacOSXAPIChecker>()
Line
Count
Source
152
16
  CHECKER *registerChecker(AT... Args) {
153
16
    CheckerTag tag = getTag<CHECKER>();
154
16
    CheckerRef &ref = CheckerTags[tag];
155
16
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
16
158
16
    CHECKER *checker = new CHECKER(Args...);
159
16
    checker->Name = CurrentCheckName;
160
16
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
16
    CHECKER::_register(checker, *this);
162
16
    ref = checker;
163
16
    return checker;
164
16
  }
MallocChecker.cpp:(anonymous namespace)::MallocChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::MallocChecker>()
Line
Count
Source
152
211
  CHECKER *registerChecker(AT... Args) {
153
211
    CheckerTag tag = getTag<CHECKER>();
154
211
    CheckerRef &ref = CheckerTags[tag];
155
211
    if (ref)
156
69
      return static_cast<CHECKER *>(ref); // already registered.
157
142
158
142
    CHECKER *checker = new CHECKER(Args...);
159
142
    checker->Name = CurrentCheckName;
160
142
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
142
    CHECKER::_register(checker, *this);
162
142
    ref = checker;
163
142
    return checker;
164
142
  }
MallocOverflowSecurityChecker.cpp:(anonymous namespace)::MallocOverflowSecurityChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::MallocOverflowSecurityChecker>()
Line
Count
Source
152
5
  CHECKER *registerChecker(AT... Args) {
153
5
    CheckerTag tag = getTag<CHECKER>();
154
5
    CheckerRef &ref = CheckerTags[tag];
155
5
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
5
158
5
    CHECKER *checker = new CHECKER(Args...);
159
5
    checker->Name = CurrentCheckName;
160
5
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
5
    CHECKER::_register(checker, *this);
162
5
    ref = checker;
163
5
    return checker;
164
5
  }
MallocSizeofChecker.cpp:(anonymous namespace)::MallocSizeofChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::MallocSizeofChecker>()
Line
Count
Source
152
19
  CHECKER *registerChecker(AT... Args) {
153
19
    CheckerTag tag = getTag<CHECKER>();
154
19
    CheckerRef &ref = CheckerTags[tag];
155
19
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
19
158
19
    CHECKER *checker = new CHECKER(Args...);
159
19
    checker->Name = CurrentCheckName;
160
19
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
19
    CHECKER::_register(checker, *this);
162
19
    ref = checker;
163
19
    return checker;
164
19
  }
MmapWriteExecChecker.cpp:(anonymous namespace)::MmapWriteExecChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::MmapWriteExecChecker>()
Line
Count
Source
152
3
  CHECKER *registerChecker(AT... Args) {
153
3
    CheckerTag tag = getTag<CHECKER>();
154
3
    CheckerRef &ref = CheckerTags[tag];
155
3
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
3
158
3
    CHECKER *checker = new CHECKER(Args...);
159
3
    checker->Name = CurrentCheckName;
160
3
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
3
    CHECKER::_register(checker, *this);
162
3
    ref = checker;
163
3
    return checker;
164
3
  }
MisusedMovedObjectChecker.cpp:(anonymous namespace)::MisusedMovedObjectChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::MisusedMovedObjectChecker>()
Line
Count
Source
152
3
  CHECKER *registerChecker(AT... Args) {
153
3
    CheckerTag tag = getTag<CHECKER>();
154
3
    CheckerRef &ref = CheckerTags[tag];
155
3
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
3
158
3
    CHECKER *checker = new CHECKER(Args...);
159
3
    checker->Name = CurrentCheckName;
160
3
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
3
    CHECKER::_register(checker, *this);
162
3
    ref = checker;
163
3
    return checker;
164
3
  }
clang::ento::mpi::MPIChecker* clang::ento::CheckerManager::registerChecker<clang::ento::mpi::MPIChecker>()
Line
Count
Source
152
3
  CHECKER *registerChecker(AT... Args) {
153
3
    CheckerTag tag = getTag<CHECKER>();
154
3
    CheckerRef &ref = CheckerTags[tag];
155
3
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
3
158
3
    CHECKER *checker = new CHECKER(Args...);
159
3
    checker->Name = CurrentCheckName;
160
3
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
3
    CHECKER::_register(checker, *this);
162
3
    ref = checker;
163
3
    return checker;
164
3
  }
NSAutoreleasePoolChecker.cpp:(anonymous namespace)::NSAutoreleasePoolChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NSAutoreleasePoolChecker>()
Line
Count
Source
152
1
  CHECKER *registerChecker(AT... Args) {
153
1
    CheckerTag tag = getTag<CHECKER>();
154
1
    CheckerRef &ref = CheckerTags[tag];
155
1
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
1
158
1
    CHECKER *checker = new CHECKER(Args...);
159
1
    checker->Name = CurrentCheckName;
160
1
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
1
    CHECKER::_register(checker, *this);
162
1
    ref = checker;
163
1
    return checker;
164
1
  }
NSErrorChecker.cpp:(anonymous namespace)::NSErrorMethodChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NSErrorMethodChecker>()
Line
Count
Source
152
14
  CHECKER *registerChecker(AT... Args) {
153
14
    CheckerTag tag = getTag<CHECKER>();
154
14
    CheckerRef &ref = CheckerTags[tag];
155
14
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
14
158
14
    CHECKER *checker = new CHECKER(Args...);
159
14
    checker->Name = CurrentCheckName;
160
14
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
14
    CHECKER::_register(checker, *this);
162
14
    ref = checker;
163
14
    return checker;
164
14
  }
NSErrorChecker.cpp:(anonymous namespace)::NSOrCFErrorDerefChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NSOrCFErrorDerefChecker>()
Line
Count
Source
152
26
  CHECKER *registerChecker(AT... Args) {
153
26
    CheckerTag tag = getTag<CHECKER>();
154
26
    CheckerRef &ref = CheckerTags[tag];
155
26
    if (ref)
156
12
      return static_cast<CHECKER *>(ref); // already registered.
157
14
158
14
    CHECKER *checker = new CHECKER(Args...);
159
14
    checker->Name = CurrentCheckName;
160
14
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
14
    CHECKER::_register(checker, *this);
162
14
    ref = checker;
163
14
    return checker;
164
14
  }
NSErrorChecker.cpp:(anonymous namespace)::CFErrorFunctionChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CFErrorFunctionChecker>()
Line
Count
Source
152
12
  CHECKER *registerChecker(AT... Args) {
153
12
    CheckerTag tag = getTag<CHECKER>();
154
12
    CheckerRef &ref = CheckerTags[tag];
155
12
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
12
158
12
    CHECKER *checker = new CHECKER(Args...);
159
12
    checker->Name = CurrentCheckName;
160
12
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
12
    CHECKER::_register(checker, *this);
162
12
    ref = checker;
163
12
    return checker;
164
12
  }
NoReturnFunctionChecker.cpp:(anonymous namespace)::NoReturnFunctionChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NoReturnFunctionChecker>()
Line
Count
Source
152
561
  CHECKER *registerChecker(AT... Args) {
153
561
    CheckerTag tag = getTag<CHECKER>();
154
561
    CheckerRef &ref = CheckerTags[tag];
155
561
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
561
158
561
    CHECKER *checker = new CHECKER(Args...);
159
561
    checker->Name = CurrentCheckName;
160
561
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
561
    CHECKER::_register(checker, *this);
162
561
    ref = checker;
163
561
    return checker;
164
561
  }
NonNullParamChecker.cpp:(anonymous namespace)::NonNullParamChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NonNullParamChecker>()
Line
Count
Source
152
550
  CHECKER *registerChecker(AT... Args) {
153
550
    CheckerTag tag = getTag<CHECKER>();
154
550
    CheckerRef &ref = CheckerTags[tag];
155
550
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
550
158
550
    CHECKER *checker = new CHECKER(Args...);
159
550
    checker->Name = CurrentCheckName;
160
550
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
550
    CHECKER::_register(checker, *this);
162
550
    ref = checker;
163
550
    return checker;
164
550
  }
NonnullGlobalConstantsChecker.cpp:(anonymous namespace)::NonnullGlobalConstantsChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NonnullGlobalConstantsChecker>()
Line
Count
Source
152
550
  CHECKER *registerChecker(AT... Args) {
153
550
    CheckerTag tag = getTag<CHECKER>();
154
550
    CheckerRef &ref = CheckerTags[tag];
155
550
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
550
158
550
    CHECKER *checker = new CHECKER(Args...);
159
550
    checker->Name = CurrentCheckName;
160
550
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
550
    CHECKER::_register(checker, *this);
162
550
    ref = checker;
163
550
    return checker;
164
550
  }
NullabilityChecker.cpp:(anonymous namespace)::NullabilityChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NullabilityChecker>()
Line
Count
Source
152
46
  CHECKER *registerChecker(AT... Args) {
153
46
    CheckerTag tag = getTag<CHECKER>();
154
46
    CheckerRef &ref = CheckerTags[tag];
155
46
    if (ref)
156
35
      return static_cast<CHECKER *>(ref); // already registered.
157
11
158
11
    CHECKER *checker = new CHECKER(Args...);
159
11
    checker->Name = CurrentCheckName;
160
11
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
11
    CHECKER::_register(checker, *this);
162
11
    ref = checker;
163
11
    return checker;
164
11
  }
NumberObjectConversionChecker.cpp:(anonymous namespace)::NumberObjectConversionChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::NumberObjectConversionChecker>()
Line
Count
Source
152
20
  CHECKER *registerChecker(AT... Args) {
153
20
    CheckerTag tag = getTag<CHECKER>();
154
20
    CheckerRef &ref = CheckerTags[tag];
155
20
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
20
158
20
    CHECKER *checker = new CHECKER(Args...);
159
20
    checker->Name = CurrentCheckName;
160
20
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
20
    CHECKER::_register(checker, *this);
162
20
    ref = checker;
163
20
    return checker;
164
20
  }
ObjCAtSyncChecker.cpp:(anonymous namespace)::ObjCAtSyncChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCAtSyncChecker>()
Line
Count
Source
152
8
  CHECKER *registerChecker(AT... Args) {
153
8
    CheckerTag tag = getTag<CHECKER>();
154
8
    CheckerRef &ref = CheckerTags[tag];
155
8
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
8
158
8
    CHECKER *checker = new CHECKER(Args...);
159
8
    checker->Name = CurrentCheckName;
160
8
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
8
    CHECKER::_register(checker, *this);
162
8
    ref = checker;
163
8
    return checker;
164
8
  }
ObjCAutoreleaseWriteChecker.cpp:(anonymous namespace)::ObjCAutoreleaseWriteChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCAutoreleaseWriteChecker>()
Line
Count
Source
152
15
  CHECKER *registerChecker(AT... Args) {
153
15
    CheckerTag tag = getTag<CHECKER>();
154
15
    CheckerRef &ref = CheckerTags[tag];
155
15
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
15
158
15
    CHECKER *checker = new CHECKER(Args...);
159
15
    checker->Name = CurrentCheckName;
160
15
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
15
    CHECKER::_register(checker, *this);
162
15
    ref = checker;
163
15
    return checker;
164
15
  }
ObjCContainersASTChecker.cpp:(anonymous namespace)::ObjCContainersASTChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCContainersASTChecker>()
Line
Count
Source
152
13
  CHECKER *registerChecker(AT... Args) {
153
13
    CheckerTag tag = getTag<CHECKER>();
154
13
    CheckerRef &ref = CheckerTags[tag];
155
13
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
13
158
13
    CHECKER *checker = new CHECKER(Args...);
159
13
    checker->Name = CurrentCheckName;
160
13
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
13
    CHECKER::_register(checker, *this);
162
13
    ref = checker;
163
13
    return checker;
164
13
  }
ObjCContainersChecker.cpp:(anonymous namespace)::ObjCContainersChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCContainersChecker>()
Line
Count
Source
152
12
  CHECKER *registerChecker(AT... Args) {
153
12
    CheckerTag tag = getTag<CHECKER>();
154
12
    CheckerRef &ref = CheckerTags[tag];
155
12
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
12
158
12
    CHECKER *checker = new CHECKER(Args...);
159
12
    checker->Name = CurrentCheckName;
160
12
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
12
    CHECKER::_register(checker, *this);
162
12
    ref = checker;
163
12
    return checker;
164
12
  }
ObjCMissingSuperCallChecker.cpp:(anonymous namespace)::ObjCSuperCallChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCSuperCallChecker>()
Line
Count
Source
152
14
  CHECKER *registerChecker(AT... Args) {
153
14
    CheckerTag tag = getTag<CHECKER>();
154
14
    CheckerRef &ref = CheckerTags[tag];
155
14
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
14
158
14
    CHECKER *checker = new CHECKER(Args...);
159
14
    checker->Name = CurrentCheckName;
160
14
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
14
    CHECKER::_register(checker, *this);
162
14
    ref = checker;
163
14
    return checker;
164
14
  }
ObjCPropertyChecker.cpp:(anonymous namespace)::ObjCPropertyChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCPropertyChecker>()
Line
Count
Source
152
12
  CHECKER *registerChecker(AT... Args) {
153
12
    CheckerTag tag = getTag<CHECKER>();
154
12
    CheckerRef &ref = CheckerTags[tag];
155
12
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
12
158
12
    CHECKER *checker = new CHECKER(Args...);
159
12
    checker->Name = CurrentCheckName;
160
12
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
12
    CHECKER::_register(checker, *this);
162
12
    ref = checker;
163
12
    return checker;
164
12
  }
ObjCSelfInitChecker.cpp:(anonymous namespace)::ObjCSelfInitChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCSelfInitChecker>()
Line
Count
Source
152
16
  CHECKER *registerChecker(AT... Args) {
153
16
    CheckerTag tag = getTag<CHECKER>();
154
16
    CheckerRef &ref = CheckerTags[tag];
155
16
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
16
158
16
    CHECKER *checker = new CHECKER(Args...);
159
16
    checker->Name = CurrentCheckName;
160
16
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
16
    CHECKER::_register(checker, *this);
162
16
    ref = checker;
163
16
    return checker;
164
16
  }
ObjCSuperDeallocChecker.cpp:(anonymous namespace)::ObjCSuperDeallocChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCSuperDeallocChecker>()
Line
Count
Source
152
14
  CHECKER *registerChecker(AT... Args) {
153
14
    CheckerTag tag = getTag<CHECKER>();
154
14
    CheckerRef &ref = CheckerTags[tag];
155
14
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
14
158
14
    CHECKER *checker = new CHECKER(Args...);
159
14
    checker->Name = CurrentCheckName;
160
14
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
14
    CHECKER::_register(checker, *this);
162
14
    ref = checker;
163
14
    return checker;
164
14
  }
ObjCUnusedIVarsChecker.cpp:(anonymous namespace)::ObjCUnusedIvarsChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ObjCUnusedIvarsChecker>()
Line
Count
Source
152
14
  CHECKER *registerChecker(AT... Args) {
153
14
    CheckerTag tag = getTag<CHECKER>();
154
14
    CheckerRef &ref = CheckerTags[tag];
155
14
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
14
158
14
    CHECKER *checker = new CHECKER(Args...);
159
14
    checker->Name = CurrentCheckName;
160
14
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
14
    CHECKER::_register(checker, *this);
162
14
    ref = checker;
163
14
    return checker;
164
14
  }
PaddingChecker.cpp:(anonymous namespace)::PaddingChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::PaddingChecker>()
Line
Count
Source
152
3
  CHECKER *registerChecker(AT... Args) {
153
3
    CheckerTag tag = getTag<CHECKER>();
154
3
    CheckerRef &ref = CheckerTags[tag];
155
3
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
3
158
3
    CHECKER *checker = new CHECKER(Args...);
159
3
    checker->Name = CurrentCheckName;
160
3
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
3
    CHECKER::_register(checker, *this);
162
3
    ref = checker;
163
3
    return checker;
164
3
  }
PointerArithChecker.cpp:(anonymous namespace)::PointerArithChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::PointerArithChecker>()
Line
Count
Source
152
69
  CHECKER *registerChecker(AT... Args) {
153
69
    CheckerTag tag = getTag<CHECKER>();
154
69
    CheckerRef &ref = CheckerTags[tag];
155
69
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
69
158
69
    CHECKER *checker = new CHECKER(Args...);
159
69
    checker->Name = CurrentCheckName;
160
69
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
69
    CHECKER::_register(checker, *this);
162
69
    ref = checker;
163
69
    return checker;
164
69
  }
PointerSubChecker.cpp:(anonymous namespace)::PointerSubChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::PointerSubChecker>()
Line
Count
Source
152
67
  CHECKER *registerChecker(AT... Args) {
153
67
    CheckerTag tag = getTag<CHECKER>();
154
67
    CheckerRef &ref = CheckerTags[tag];
155
67
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
67
158
67
    CHECKER *checker = new CHECKER(Args...);
159
67
    checker->Name = CurrentCheckName;
160
67
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
67
    CHECKER::_register(checker, *this);
162
67
    ref = checker;
163
67
    return checker;
164
67
  }
PthreadLockChecker.cpp:(anonymous namespace)::PthreadLockChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::PthreadLockChecker>()
Line
Count
Source
152
5
  CHECKER *registerChecker(AT... Args) {
153
5
    CheckerTag tag = getTag<CHECKER>();
154
5
    CheckerRef &ref = CheckerTags[tag];
155
5
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
5
158
5
    CHECKER *checker = new CHECKER(Args...);
159
5
    checker->Name = CurrentCheckName;
160
5
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
5
    CHECKER::_register(checker, *this);
162
5
    ref = checker;
163
5
    return checker;
164
5
  }
RetainCountChecker.cpp:(anonymous namespace)::RetainCountChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::RetainCountChecker, clang::AnalyzerOptions>(clang::AnalyzerOptions)
Line
Count
Source
152
64
  CHECKER *registerChecker(AT... Args) {
153
64
    CheckerTag tag = getTag<CHECKER>();
154
64
    CheckerRef &ref = CheckerTags[tag];
155
64
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
64
158
64
    CHECKER *checker = new CHECKER(Args...);
159
64
    checker->Name = CurrentCheckName;
160
64
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
64
    CHECKER::_register(checker, *this);
162
64
    ref = checker;
163
64
    return checker;
164
64
  }
ReturnPointerRangeChecker.cpp:(anonymous namespace)::ReturnPointerRangeChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ReturnPointerRangeChecker>()
Line
Count
Source
152
4
  CHECKER *registerChecker(AT... Args) {
153
4
    CheckerTag tag = getTag<CHECKER>();
154
4
    CheckerRef &ref = CheckerTags[tag];
155
4
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
4
158
4
    CHECKER *checker = new CHECKER(Args...);
159
4
    checker->Name = CurrentCheckName;
160
4
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
4
    CHECKER::_register(checker, *this);
162
4
    ref = checker;
163
4
    return checker;
164
4
  }
ReturnUndefChecker.cpp:(anonymous namespace)::ReturnUndefChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ReturnUndefChecker>()
Line
Count
Source
152
551
  CHECKER *registerChecker(AT... Args) {
153
551
    CheckerTag tag = getTag<CHECKER>();
154
551
    CheckerRef &ref = CheckerTags[tag];
155
551
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
551
158
551
    CHECKER *checker = new CHECKER(Args...);
159
551
    checker->Name = CurrentCheckName;
160
551
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
551
    CHECKER::_register(checker, *this);
162
551
    ref = checker;
163
551
    return checker;
164
551
  }
SimpleStreamChecker.cpp:(anonymous namespace)::SimpleStreamChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::SimpleStreamChecker>()
Line
Count
Source
152
5
  CHECKER *registerChecker(AT... Args) {
153
5
    CheckerTag tag = getTag<CHECKER>();
154
5
    CheckerRef &ref = CheckerTags[tag];
155
5
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
5
158
5
    CHECKER *checker = new CHECKER(Args...);
159
5
    checker->Name = CurrentCheckName;
160
5
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
5
    CHECKER::_register(checker, *this);
162
5
    ref = checker;
163
5
    return checker;
164
5
  }
StackAddrEscapeChecker.cpp:(anonymous namespace)::StackAddrEscapeChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::StackAddrEscapeChecker>()
Line
Count
Source
152
617
  CHECKER *registerChecker(AT... Args) {
153
617
    CheckerTag tag = getTag<CHECKER>();
154
617
    CheckerRef &ref = CheckerTags[tag];
155
617
    if (ref)
156
67
      return static_cast<CHECKER *>(ref); // already registered.
157
550
158
550
    CHECKER *checker = new CHECKER(Args...);
159
550
    checker->Name = CurrentCheckName;
160
550
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
550
    CHECKER::_register(checker, *this);
162
550
    ref = checker;
163
550
    return checker;
164
550
  }
StdLibraryFunctionsChecker.cpp:(anonymous namespace)::StdLibraryFunctionsChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::StdLibraryFunctionsChecker>()
Line
Count
Source
152
23
  CHECKER *registerChecker(AT... Args) {
153
23
    CheckerTag tag = getTag<CHECKER>();
154
23
    CheckerRef &ref = CheckerTags[tag];
155
23
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
23
158
23
    CHECKER *checker = new CHECKER(Args...);
159
23
    checker->Name = CurrentCheckName;
160
23
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
23
    CHECKER::_register(checker, *this);
162
23
    ref = checker;
163
23
    return checker;
164
23
  }
StreamChecker.cpp:(anonymous namespace)::StreamChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::StreamChecker>()
Line
Count
Source
152
5
  CHECKER *registerChecker(AT... Args) {
153
5
    CheckerTag tag = getTag<CHECKER>();
154
5
    CheckerRef &ref = CheckerTags[tag];
155
5
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
5
158
5
    CHECKER *checker = new CHECKER(Args...);
159
5
    checker->Name = CurrentCheckName;
160
5
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
5
    CHECKER::_register(checker, *this);
162
5
    ref = checker;
163
5
    return checker;
164
5
  }
TaintTesterChecker.cpp:(anonymous namespace)::TaintTesterChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::TaintTesterChecker>()
Line
Count
Source
152
4
  CHECKER *registerChecker(AT... Args) {
153
4
    CheckerTag tag = getTag<CHECKER>();
154
4
    CheckerRef &ref = CheckerTags[tag];
155
4
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
4
158
4
    CHECKER *checker = new CHECKER(Args...);
159
4
    checker->Name = CurrentCheckName;
160
4
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
4
    CHECKER::_register(checker, *this);
162
4
    ref = checker;
163
4
    return checker;
164
4
  }
TestAfterDivZeroChecker.cpp:(anonymous namespace)::TestAfterDivZeroChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::TestAfterDivZeroChecker>()
Line
Count
Source
152
67
  CHECKER *registerChecker(AT... Args) {
153
67
    CheckerTag tag = getTag<CHECKER>();
154
67
    CheckerRef &ref = CheckerTags[tag];
155
67
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
67
158
67
    CHECKER *checker = new CHECKER(Args...);
159
67
    checker->Name = CurrentCheckName;
160
67
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
67
    CHECKER::_register(checker, *this);
162
67
    ref = checker;
163
67
    return checker;
164
67
  }
TraversalChecker.cpp:(anonymous namespace)::TraversalDumper* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::TraversalDumper>()
Line
Count
Source
152
4
  CHECKER *registerChecker(AT... Args) {
153
4
    CheckerTag tag = getTag<CHECKER>();
154
4
    CheckerRef &ref = CheckerTags[tag];
155
4
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
4
158
4
    CHECKER *checker = new CHECKER(Args...);
159
4
    checker->Name = CurrentCheckName;
160
4
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
4
    CHECKER::_register(checker, *this);
162
4
    ref = checker;
163
4
    return checker;
164
4
  }
Unexecuted instantiation: TraversalChecker.cpp:(anonymous namespace)::CallDumper* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::CallDumper>()
TrustNonnullChecker.cpp:(anonymous namespace)::TrustNonnullChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::TrustNonnullChecker>()
Line
Count
Source
152
3
  CHECKER *registerChecker(AT... Args) {
153
3
    CheckerTag tag = getTag<CHECKER>();
154
3
    CheckerRef &ref = CheckerTags[tag];
155
3
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
3
158
3
    CHECKER *checker = new CHECKER(Args...);
159
3
    checker->Name = CurrentCheckName;
160
3
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
3
    CHECKER::_register(checker, *this);
162
3
    ref = checker;
163
3
    return checker;
164
3
  }
UndefBranchChecker.cpp:(anonymous namespace)::UndefBranchChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::UndefBranchChecker>()
Line
Count
Source
152
550
  CHECKER *registerChecker(AT... Args) {
153
550
    CheckerTag tag = getTag<CHECKER>();
154
550
    CheckerRef &ref = CheckerTags[tag];
155
550
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
550
158
550
    CHECKER *checker = new CHECKER(Args...);
159
550
    checker->Name = CurrentCheckName;
160
550
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
550
    CHECKER::_register(checker, *this);
162
550
    ref = checker;
163
550
    return checker;
164
550
  }
UndefCapturedBlockVarChecker.cpp:(anonymous namespace)::UndefCapturedBlockVarChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::UndefCapturedBlockVarChecker>()
Line
Count
Source
152
550
  CHECKER *registerChecker(AT... Args) {
153
550
    CheckerTag tag = getTag<CHECKER>();
154
550
    CheckerRef &ref = CheckerTags[tag];
155
550
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
550
158
550
    CHECKER *checker = new CHECKER(Args...);
159
550
    checker->Name = CurrentCheckName;
160
550
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
550
    CHECKER::_register(checker, *this);
162
550
    ref = checker;
163
550
    return checker;
164
550
  }
UndefResultChecker.cpp:(anonymous namespace)::UndefResultChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::UndefResultChecker>()
Line
Count
Source
152
550
  CHECKER *registerChecker(AT... Args) {
153
550
    CheckerTag tag = getTag<CHECKER>();
154
550
    CheckerRef &ref = CheckerTags[tag];
155
550
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
550
158
550
    CHECKER *checker = new CHECKER(Args...);
159
550
    checker->Name = CurrentCheckName;
160
550
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
550
    CHECKER::_register(checker, *this);
162
550
    ref = checker;
163
550
    return checker;
164
550
  }
UndefinedArraySubscriptChecker.cpp:(anonymous namespace)::UndefinedArraySubscriptChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::UndefinedArraySubscriptChecker>()
Line
Count
Source
152
550
  CHECKER *registerChecker(AT... Args) {
153
550
    CheckerTag tag = getTag<CHECKER>();
154
550
    CheckerRef &ref = CheckerTags[tag];
155
550
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
550
158
550
    CHECKER *checker = new CHECKER(Args...);
159
550
    checker->Name = CurrentCheckName;
160
550
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
550
    CHECKER::_register(checker, *this);
162
550
    ref = checker;
163
550
    return checker;
164
550
  }
UndefinedAssignmentChecker.cpp:(anonymous namespace)::UndefinedAssignmentChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::UndefinedAssignmentChecker>()
Line
Count
Source
152
550
  CHECKER *registerChecker(AT... Args) {
153
550
    CheckerTag tag = getTag<CHECKER>();
154
550
    CheckerRef &ref = CheckerTags[tag];
155
550
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
550
158
550
    CHECKER *checker = new CHECKER(Args...);
159
550
    checker->Name = CurrentCheckName;
160
550
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
550
    CHECKER::_register(checker, *this);
162
550
    ref = checker;
163
550
    return checker;
164
550
  }
UninitializedObjectChecker.cpp:(anonymous namespace)::UninitializedObjectChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::UninitializedObjectChecker>()
Line
Count
Source
152
7
  CHECKER *registerChecker(AT... Args) {
153
7
    CheckerTag tag = getTag<CHECKER>();
154
7
    CheckerRef &ref = CheckerTags[tag];
155
7
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
7
158
7
    CHECKER *checker = new CHECKER(Args...);
159
7
    checker->Name = CurrentCheckName;
160
7
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
7
    CHECKER::_register(checker, *this);
162
7
    ref = checker;
163
7
    return checker;
164
7
  }
UnixAPIChecker.cpp:(anonymous namespace)::UnixAPIChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::UnixAPIChecker>()
Line
Count
Source
152
26
  CHECKER *registerChecker(AT... Args) {
153
26
    CheckerTag tag = getTag<CHECKER>();
154
26
    CheckerRef &ref = CheckerTags[tag];
155
26
    if (ref)
156
3
      return static_cast<CHECKER *>(ref); // already registered.
157
23
158
23
    CHECKER *checker = new CHECKER(Args...);
159
23
    checker->Name = CurrentCheckName;
160
23
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
23
    CHECKER::_register(checker, *this);
162
23
    ref = checker;
163
23
    return checker;
164
23
  }
UnreachableCodeChecker.cpp:(anonymous namespace)::UnreachableCodeChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::UnreachableCodeChecker>()
Line
Count
Source
152
9
  CHECKER *registerChecker(AT... Args) {
153
9
    CheckerTag tag = getTag<CHECKER>();
154
9
    CheckerRef &ref = CheckerTags[tag];
155
9
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
9
158
9
    CHECKER *checker = new CHECKER(Args...);
159
9
    checker->Name = CurrentCheckName;
160
9
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
9
    CHECKER::_register(checker, *this);
162
9
    ref = checker;
163
9
    return checker;
164
9
  }
VforkChecker.cpp:(anonymous namespace)::VforkChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::VforkChecker>()
Line
Count
Source
152
19
  CHECKER *registerChecker(AT... Args) {
153
19
    CheckerTag tag = getTag<CHECKER>();
154
19
    CheckerRef &ref = CheckerTags[tag];
155
19
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
19
158
19
    CHECKER *checker = new CHECKER(Args...);
159
19
    checker->Name = CurrentCheckName;
160
19
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
19
    CHECKER::_register(checker, *this);
162
19
    ref = checker;
163
19
    return checker;
164
19
  }
VLASizeChecker.cpp:(anonymous namespace)::VLASizeChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::VLASizeChecker>()
Line
Count
Source
152
550
  CHECKER *registerChecker(AT... Args) {
153
550
    CheckerTag tag = getTag<CHECKER>();
154
550
    CheckerRef &ref = CheckerTags[tag];
155
550
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
550
158
550
    CHECKER *checker = new CHECKER(Args...);
159
550
    checker->Name = CurrentCheckName;
160
550
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
550
    CHECKER::_register(checker, *this);
162
550
    ref = checker;
163
550
    return checker;
164
550
  }
ValistChecker.cpp:(anonymous namespace)::ValistChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::ValistChecker>()
Line
Count
Source
152
12
  CHECKER *registerChecker(AT... Args) {
153
12
    CheckerTag tag = getTag<CHECKER>();
154
12
    CheckerRef &ref = CheckerTags[tag];
155
12
    if (ref)
156
6
      return static_cast<CHECKER *>(ref); // already registered.
157
6
158
6
    CHECKER *checker = new CHECKER(Args...);
159
6
    checker->Name = CurrentCheckName;
160
6
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
6
    CHECKER::_register(checker, *this);
162
6
    ref = checker;
163
6
    return checker;
164
6
  }
VirtualCallChecker.cpp:(anonymous namespace)::VirtualCallChecker* clang::ento::CheckerManager::registerChecker<(anonymous namespace)::VirtualCallChecker>()
Line
Count
Source
152
2
  CHECKER *registerChecker(AT... Args) {
153
2
    CheckerTag tag = getTag<CHECKER>();
154
2
    CheckerRef &ref = CheckerTags[tag];
155
2
    if (ref)
156
0
      return static_cast<CHECKER *>(ref); // already registered.
157
2
158
2
    CHECKER *checker = new CHECKER(Args...);
159
2
    checker->Name = CurrentCheckName;
160
2
    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
161
2
    CHECKER::_register(checker, *this);
162
2
    ref = checker;
163
2
    return checker;
164
2
  }
165
166
//===----------------------------------------------------------------------===//
167
// Functions for running checkers for AST traversing..
168
//===----------------------------------------------------------------------===//
169
170
  /// Run checkers handling Decls.
171
  void runCheckersOnASTDecl(const Decl *D, AnalysisManager& mgr,
172
                            BugReporter &BR);
173
174
  /// Run checkers handling Decls containing a Stmt body.
175
  void runCheckersOnASTBody(const Decl *D, AnalysisManager& mgr,
176
                            BugReporter &BR);
177
178
//===----------------------------------------------------------------------===//
179
// Functions for running checkers for path-sensitive checking.
180
//===----------------------------------------------------------------------===//
181
182
  /// Run checkers for pre-visiting Stmts.
183
  ///
184
  /// The notification is performed for every explored CFGElement, which does
185
  /// not include the control flow statements such as IfStmt.
186
  ///
187
  /// \sa runCheckersForBranchCondition, runCheckersForPostStmt
188
  void runCheckersForPreStmt(ExplodedNodeSet &Dst,
189
                             const ExplodedNodeSet &Src,
190
                             const Stmt *S,
191
571k
                             ExprEngine &Eng) {
192
571k
    runCheckersForStmt(/*isPreVisit=*/true, Dst, Src, S, Eng);
193
571k
  }
194
195
  /// Run checkers for post-visiting Stmts.
196
  ///
197
  /// The notification is performed for every explored CFGElement, which does
198
  /// not include the control flow statements such as IfStmt.
199
  ///
200
  /// \sa runCheckersForBranchCondition, runCheckersForPreStmt
201
  void runCheckersForPostStmt(ExplodedNodeSet &Dst,
202
                              const ExplodedNodeSet &Src,
203
                              const Stmt *S,
204
                              ExprEngine &Eng,
205
582k
                              bool wasInlined = false) {
206
582k
    runCheckersForStmt(/*isPreVisit=*/false, Dst, Src, S, Eng, wasInlined);
207
582k
  }
208
209
  /// Run checkers for visiting Stmts.
210
  void runCheckersForStmt(bool isPreVisit,
211
                          ExplodedNodeSet &Dst, const ExplodedNodeSet &Src,
212
                          const Stmt *S, ExprEngine &Eng,
213
                          bool wasInlined = false);
214
215
  /// Run checkers for pre-visiting obj-c messages.
216
  void runCheckersForPreObjCMessage(ExplodedNodeSet &Dst,
217
                                    const ExplodedNodeSet &Src,
218
                                    const ObjCMethodCall &msg,
219
3.60k
                                    ExprEngine &Eng) {
220
3.60k
    runCheckersForObjCMessage(ObjCMessageVisitKind::Pre, Dst, Src, msg, Eng);
221
3.60k
  }
222
223
  /// Run checkers for post-visiting obj-c messages.
224
  void runCheckersForPostObjCMessage(ExplodedNodeSet &Dst,
225
                                     const ExplodedNodeSet &Src,
226
                                     const ObjCMethodCall &msg,
227
                                     ExprEngine &Eng,
228
4.09k
                                     bool wasInlined = false) {
229
4.09k
    runCheckersForObjCMessage(ObjCMessageVisitKind::Post, Dst, Src, msg, Eng,
230
4.09k
                              wasInlined);
231
4.09k
  }
232
233
  /// Run checkers for visiting an obj-c message to nil.
234
  void runCheckersForObjCMessageNil(ExplodedNodeSet &Dst,
235
                                    const ExplodedNodeSet &Src,
236
                                    const ObjCMethodCall &msg,
237
90
                                    ExprEngine &Eng) {
238
90
    runCheckersForObjCMessage(ObjCMessageVisitKind::MessageNil, Dst, Src, msg,
239
90
                              Eng);
240
90
  }
241
242
  /// Run checkers for visiting obj-c messages.
243
  void runCheckersForObjCMessage(ObjCMessageVisitKind visitKind,
244
                                 ExplodedNodeSet &Dst,
245
                                 const ExplodedNodeSet &Src,
246
                                 const ObjCMethodCall &msg, ExprEngine &Eng,
247
                                 bool wasInlined = false);
248
249
  /// Run checkers for pre-visiting obj-c messages.
250
  void runCheckersForPreCall(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src,
251
61.9k
                             const CallEvent &Call, ExprEngine &Eng) {
252
61.9k
    runCheckersForCallEvent(/*isPreVisit=*/true, Dst, Src, Call, Eng);
253
61.9k
  }
254
255
  /// Run checkers for post-visiting obj-c messages.
256
  void runCheckersForPostCall(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src,
257
                              const CallEvent &Call, ExprEngine &Eng,
258
86.7k
                              bool wasInlined = false) {
259
86.7k
    runCheckersForCallEvent(/*isPreVisit=*/false, Dst, Src, Call, Eng,
260
86.7k
                            wasInlined);
261
86.7k
  }
262
263
  /// Run checkers for visiting obj-c messages.
264
  void runCheckersForCallEvent(bool isPreVisit, ExplodedNodeSet &Dst,
265
                               const ExplodedNodeSet &Src,
266
                               const CallEvent &Call, ExprEngine &Eng,
267
                               bool wasInlined = false);
268
269
  /// Run checkers for load/store of a location.
270
  void runCheckersForLocation(ExplodedNodeSet &Dst,
271
                              const ExplodedNodeSet &Src,
272
                              SVal location,
273
                              bool isLoad,
274
                              const Stmt *NodeEx,
275
                              const Stmt *BoundEx,
276
                              ExprEngine &Eng);
277
278
  /// Run checkers for binding of a value to a location.
279
  void runCheckersForBind(ExplodedNodeSet &Dst,
280
                          const ExplodedNodeSet &Src,
281
                          SVal location, SVal val,
282
                          const Stmt *S, ExprEngine &Eng,
283
                          const ProgramPoint &PP);
284
285
  /// Run checkers for end of analysis.
286
  void runCheckersForEndAnalysis(ExplodedGraph &G, BugReporter &BR,
287
                                 ExprEngine &Eng);
288
289
  /// Run checkers on beginning of function.
290
  void runCheckersForBeginFunction(ExplodedNodeSet &Dst,
291
                                   const BlockEdge &L,
292
                                   ExplodedNode *Pred,
293
                                   ExprEngine &Eng);
294
295
  /// Run checkers on end of function.
296
  void runCheckersForEndFunction(NodeBuilderContext &BC,
297
                                 ExplodedNodeSet &Dst,
298
                                 ExplodedNode *Pred,
299
                                 ExprEngine &Eng,
300
                                 const ReturnStmt *RS);
301
302
  /// Run checkers for branch condition.
303
  void runCheckersForBranchCondition(const Stmt *condition,
304
                                     ExplodedNodeSet &Dst, ExplodedNode *Pred,
305
                                     ExprEngine &Eng);
306
307
  /// Run checkers between C++ operator new and constructor calls.
308
  void runCheckersForNewAllocator(const CXXNewExpr *NE, SVal Target,
309
                                  ExplodedNodeSet &Dst,
310
                                  ExplodedNode *Pred,
311
                                  ExprEngine &Eng,
312
                                  bool wasInlined = false);
313
314
  /// Run checkers for live symbols.
315
  ///
316
  /// Allows modifying SymbolReaper object. For example, checkers can explicitly
317
  /// register symbols of interest as live. These symbols will not be marked
318
  /// dead and removed.
319
  void runCheckersForLiveSymbols(ProgramStateRef state,
320
                                 SymbolReaper &SymReaper);
321
322
  /// Run checkers for dead symbols.
323
  ///
324
  /// Notifies checkers when symbols become dead. For example, this allows
325
  /// checkers to aggressively clean up/reduce the checker state and produce
326
  /// precise diagnostics.
327
  void runCheckersForDeadSymbols(ExplodedNodeSet &Dst,
328
                                 const ExplodedNodeSet &Src,
329
                                 SymbolReaper &SymReaper, const Stmt *S,
330
                                 ExprEngine &Eng,
331
                                 ProgramPoint::Kind K);
332
333
  /// Run checkers for region changes.
334
  ///
335
  /// This corresponds to the check::RegionChanges callback.
336
  /// \param state The current program state.
337
  /// \param invalidated A set of all symbols potentially touched by the change.
338
  /// \param ExplicitRegions The regions explicitly requested for invalidation.
339
  ///   For example, in the case of a function call, these would be arguments.
340
  /// \param Regions The transitive closure of accessible regions,
341
  ///   i.e. all regions that may have been touched by this change.
342
  /// \param Call The call expression wrapper if the regions are invalidated
343
  ///   by a call.
344
  ProgramStateRef
345
  runCheckersForRegionChanges(ProgramStateRef state,
346
                              const InvalidatedSymbols *invalidated,
347
                              ArrayRef<const MemRegion *> ExplicitRegions,
348
                              ArrayRef<const MemRegion *> Regions,
349
                              const LocationContext *LCtx,
350
                              const CallEvent *Call);
351
352
  /// Run checkers when pointers escape.
353
  ///
354
  /// This notifies the checkers about pointer escape, which occurs whenever
355
  /// the analyzer cannot track the symbol any more. For example, as a
356
  /// result of assigning a pointer into a global or when it's passed to a 
357
  /// function call the analyzer cannot model.
358
  /// 
359
  /// \param State The state at the point of escape.
360
  /// \param Escaped The list of escaped symbols.
361
  /// \param Call The corresponding CallEvent, if the symbols escape as 
362
  ///        parameters to the given call.
363
  /// \param Kind The reason of pointer escape.
364
  /// \param ITraits Information about invalidation for a particular 
365
  ///        region/symbol.
366
  /// \returns Checkers can modify the state by returning a new one.
367
  ProgramStateRef 
368
  runCheckersForPointerEscape(ProgramStateRef State,
369
                              const InvalidatedSymbols &Escaped,
370
                              const CallEvent *Call,
371
                              PointerEscapeKind Kind,
372
                              RegionAndSymbolInvalidationTraits *ITraits);
373
374
  /// Run checkers for handling assumptions on symbolic values.
375
  ProgramStateRef runCheckersForEvalAssume(ProgramStateRef state,
376
                                           SVal Cond, bool Assumption);
377
378
  /// Run checkers for evaluating a call.
379
  ///
380
  /// Warning: Currently, the CallEvent MUST come from a CallExpr!
381
  void runCheckersForEvalCall(ExplodedNodeSet &Dst,
382
                              const ExplodedNodeSet &Src,
383
                              const CallEvent &CE, ExprEngine &Eng);
384
  
385
  /// Run checkers for the entire Translation Unit.
386
  void runCheckersOnEndOfTranslationUnit(const TranslationUnitDecl *TU,
387
                                         AnalysisManager &mgr,
388
                                         BugReporter &BR);
389
390
  /// Run checkers for debug-printing a ProgramState.
391
  ///
392
  /// Unlike most other callbacks, any checker can simply implement the virtual
393
  /// method CheckerBase::printState if it has custom data to print.
394
  /// \param Out The output stream
395
  /// \param State The state being printed
396
  /// \param NL The preferred representation of a newline.
397
  /// \param Sep The preferred separator between different kinds of data.
398
  void runCheckersForPrintState(raw_ostream &Out, ProgramStateRef State,
399
                                const char *NL, const char *Sep);
400
401
//===----------------------------------------------------------------------===//
402
// Internal registration functions for AST traversing.
403
//===----------------------------------------------------------------------===//
404
405
  // Functions used by the registration mechanism, checkers should not touch
406
  // these directly.
407
408
  using CheckDeclFunc =
409
      CheckerFn<void (const Decl *, AnalysisManager&, BugReporter &)>;
410
411
  using HandlesDeclFunc = bool (*)(const Decl *D);
412
413
  void _registerForDecl(CheckDeclFunc checkfn, HandlesDeclFunc isForDeclFn);
414
415
  void _registerForBody(CheckDeclFunc checkfn);
416
417
//===----------------------------------------------------------------------===//
418
// Internal registration functions for path-sensitive checking.
419
//===----------------------------------------------------------------------===//
420
421
  using CheckStmtFunc = CheckerFn<void (const Stmt *, CheckerContext &)>;
422
  
423
  using CheckObjCMessageFunc =
424
      CheckerFn<void (const ObjCMethodCall &, CheckerContext &)>;
425
426
  using CheckCallFunc =
427
      CheckerFn<void (const CallEvent &, CheckerContext &)>;
428
  
429
  using CheckLocationFunc =
430
      CheckerFn<void (const SVal &location, bool isLoad, const Stmt *S,
431
                      CheckerContext &)>;
432
  
433
  using CheckBindFunc =
434
      CheckerFn<void (const SVal &location, const SVal &val, const Stmt *S,
435
                      CheckerContext &)>;
436
  
437
  using CheckEndAnalysisFunc =
438
      CheckerFn<void (ExplodedGraph &, BugReporter &, ExprEngine &)>;
439
440
  using CheckBeginFunctionFunc = CheckerFn<void (CheckerContext &)>;
441
442
  using CheckEndFunctionFunc =
443
      CheckerFn<void (const ReturnStmt *, CheckerContext &)>;
444
  
445
  using CheckBranchConditionFunc =
446
      CheckerFn<void (const Stmt *, CheckerContext &)>;
447
448
  using CheckNewAllocatorFunc =
449
      CheckerFn<void (const CXXNewExpr *, SVal, CheckerContext &)>;
450
  
451
  using CheckDeadSymbolsFunc =
452
      CheckerFn<void (SymbolReaper &, CheckerContext &)>;
453
  
454
  using CheckLiveSymbolsFunc = CheckerFn<void (ProgramStateRef,SymbolReaper &)>;
455
  
456
  using CheckRegionChangesFunc =
457
      CheckerFn<ProgramStateRef (ProgramStateRef,
458
                                 const InvalidatedSymbols *symbols,
459
                                 ArrayRef<const MemRegion *> ExplicitRegions,
460
                                 ArrayRef<const MemRegion *> Regions,
461
                                 const LocationContext *LCtx,
462
                                 const CallEvent *Call)>;
463
  
464
  using CheckPointerEscapeFunc =
465
      CheckerFn<ProgramStateRef (ProgramStateRef,
466
                                 const InvalidatedSymbols &Escaped,
467
                                 const CallEvent *Call, PointerEscapeKind Kind,
468
                                 RegionAndSymbolInvalidationTraits *ITraits)>;
469
  
470
  using EvalAssumeFunc =
471
      CheckerFn<ProgramStateRef (ProgramStateRef, const SVal &cond,
472
                                 bool assumption)>;
473
  
474
  using EvalCallFunc = CheckerFn<bool (const CallExpr *, CheckerContext &)>;
475
476
  using CheckEndOfTranslationUnit =
477
      CheckerFn<void (const TranslationUnitDecl *, AnalysisManager &,
478
                      BugReporter &)>;
479
480
  using HandlesStmtFunc = bool (*)(const Stmt *D);
481
482
  void _registerForPreStmt(CheckStmtFunc checkfn,
483
                           HandlesStmtFunc isForStmtFn);
484
  void _registerForPostStmt(CheckStmtFunc checkfn,
485
                            HandlesStmtFunc isForStmtFn);
486
487
  void _registerForPreObjCMessage(CheckObjCMessageFunc checkfn);
488
  void _registerForPostObjCMessage(CheckObjCMessageFunc checkfn);
489
490
  void _registerForObjCMessageNil(CheckObjCMessageFunc checkfn);
491
492
  void _registerForPreCall(CheckCallFunc checkfn);
493
  void _registerForPostCall(CheckCallFunc checkfn);
494
495
  void _registerForLocation(CheckLocationFunc checkfn);
496
497
  void _registerForBind(CheckBindFunc checkfn);
498
499
  void _registerForEndAnalysis(CheckEndAnalysisFunc checkfn);
500
501
  void _registerForBeginFunction(CheckBeginFunctionFunc checkfn);
502
  void _registerForEndFunction(CheckEndFunctionFunc checkfn);
503
504
  void _registerForBranchCondition(CheckBranchConditionFunc checkfn);
505
506
  void _registerForNewAllocator(CheckNewAllocatorFunc checkfn);
507
508
  void _registerForLiveSymbols(CheckLiveSymbolsFunc checkfn);
509
510
  void _registerForDeadSymbols(CheckDeadSymbolsFunc checkfn);
511
512
  void _registerForRegionChanges(CheckRegionChangesFunc checkfn);
513
514
  void _registerForPointerEscape(CheckPointerEscapeFunc checkfn);
515
516
  void _registerForConstPointerEscape(CheckPointerEscapeFunc checkfn);
517
518
  void _registerForEvalAssume(EvalAssumeFunc checkfn);
519
520
  void _registerForEvalCall(EvalCallFunc checkfn);
521
522
  void _registerForEndOfTranslationUnit(CheckEndOfTranslationUnit checkfn);
523
524
//===----------------------------------------------------------------------===//
525
// Internal registration functions for events.
526
//===----------------------------------------------------------------------===//
527
528
  using EventTag = void *;
529
  using CheckEventFunc = CheckerFn<void (const void *event)>;
530
531
  template <typename EVENT>
532
25
  void _registerListenerForEvent(CheckEventFunc checkfn) {
533
25
    EventInfo &info = Events[getTag<EVENT>()];
534
25
    info.Checkers.push_back(checkfn);    
535
25
  }
536
537
  template <typename EVENT>
538
1.10k
  void _registerDispatcherForEvent() {
539
1.10k
    EventInfo &info = Events[getTag<EVENT>()];
540
1.10k
    info.HasDispatcher = true;
541
1.10k
  }
542
543
  template <typename EVENT>
544
3.02k
  void _dispatchEvent(const EVENT &event) const {
545
3.02k
    EventsTy::const_iterator I = Events.find(getTag<EVENT>());
546
3.02k
    if (I == Events.end())
547
0
      return;
548
3.02k
    const EventInfo &info = I->second;
549
3.02k
    for (const auto Checker : info.Checkers)
550
12
      Checker(&event);
551
3.02k
  }
552
553
//===----------------------------------------------------------------------===//
554
// Implementation details.
555
//===----------------------------------------------------------------------===//
556
557
private:
558
  template <typename CHECKER>
559
10.8k
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
AnalysisOrderChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::AnalysisOrderChecker>(void*)
Line
Count
Source
559
6
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
AnalyzerStatsChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::AnalyzerStatsChecker>(void*)
Line
Count
Source
559
2
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ArrayBoundChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ArrayBoundChecker>(void*)
Line
Count
Source
559
7
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ArrayBoundCheckerV2.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ArrayBoundCheckerV2>(void*)
Line
Count
Source
559
8
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BasicObjCFoundationChecks.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NilArgChecker>(void*)
Line
Count
Source
559
20
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BasicObjCFoundationChecks.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CFNumberChecker>(void*)
Line
Count
Source
559
12
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BasicObjCFoundationChecks.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CFRetainReleaseChecker>(void*)
Line
Count
Source
559
23
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BasicObjCFoundationChecks.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ClassReleaseChecker>(void*)
Line
Count
Source
559
23
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BasicObjCFoundationChecks.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::VariadicMethodTypeChecker>(void*)
Line
Count
Source
559
14
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BasicObjCFoundationChecks.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCLoopChecker>(void*)
Line
Count
Source
559
15
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BasicObjCFoundationChecks.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCNonNilReturnValueChecker>(void*)
Line
Count
Source
559
16
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BlockInCriticalSectionChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::BlockInCriticalSectionChecker>(void*)
Line
Count
Source
559
6
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BoolAssignmentChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::BoolAssignmentChecker>(void*)
Line
Count
Source
559
67
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
BuiltinFunctionChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::BuiltinFunctionChecker>(void*)
Line
Count
Source
559
560
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CStringChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CStringChecker>(void*)
Line
Count
Source
559
154
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CStringSyntaxChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CStringSyntaxChecker>(void*)
Line
Count
Source
559
43
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CallAndMessageChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CallAndMessageChecker>(void*)
Line
Count
Source
559
548
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CastSizeChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CastSizeChecker>(void*)
Line
Count
Source
559
58
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CastToStructChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CastToStructChecker>(void*)
Line
Count
Source
559
71
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CheckObjCDealloc.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCDeallocChecker>(void*)
Line
Count
Source
559
18
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CheckObjCInstMethSignature.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCMethSigsChecker>(void*)
Line
Count
Source
559
15
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CheckSecuritySyntaxOnly.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::SecuritySyntaxChecker>(void*)
Line
Count
Source
559
12
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CheckSizeofPointer.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::SizeofPointerChecker>(void*)
Line
Count
Source
559
66
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ChrootChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ChrootChecker>(void*)
Line
Count
Source
559
5
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CloneChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CloneChecker>(void*)
Line
Count
Source
559
28
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ConversionChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ConversionChecker>(void*)
Line
Count
Source
559
66
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
CXXSelfAssignmentChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CXXSelfAssignmentChecker>(void*)
Line
Count
Source
559
7
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
DeadStoresChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::DeadStoresChecker>(void*)
Line
Count
Source
559
23
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
DebugCheckers.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::DominatorsTreeDumper>(void*)
Line
Count
Source
559
1
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
Unexecuted instantiation: DebugCheckers.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::LiveVariablesDumper>(void*)
Unexecuted instantiation: DebugCheckers.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CFGViewer>(void*)
DebugCheckers.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CFGDumper>(void*)
Line
Count
Source
559
26
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
Unexecuted instantiation: DebugCheckers.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CallGraphViewer>(void*)
DebugCheckers.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CallGraphDumper>(void*)
Line
Count
Source
559
1
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
DebugCheckers.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ConfigDumper>(void*)
Line
Count
Source
559
2
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
Unexecuted instantiation: DebugCheckers.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ExplodedGraphViewer>(void*)
DeleteWithNonVirtualDtorChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::DeleteWithNonVirtualDtorChecker>(void*)
Line
Count
Source
559
2
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
DereferenceChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::DereferenceChecker>(void*)
Line
Count
Source
559
558
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
DirectIvarAssignment.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::DirectIvarAssignment>(void*)
Line
Count
Source
559
3
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
DivZeroChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::DivZeroChecker>(void*)
Line
Count
Source
559
557
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
DynamicTypePropagation.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::DynamicTypePropagation>(void*)
Line
Count
Source
559
551
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
DynamicTypeChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::DynamicTypeChecker>(void*)
Line
Count
Source
559
68
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ExprInspectionChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ExprInspectionChecker>(void*)
Line
Count
Source
559
200
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
FixedAddressChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::FixedAddressChecker>(void*)
Line
Count
Source
559
67
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
GCDAntipatternChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::GCDAntipatternChecker>(void*)
Line
Count
Source
559
4
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
GenericTaintChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::GenericTaintChecker>(void*)
Line
Count
Source
559
11
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
GTestChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::GTestChecker>(void*)
Line
Count
Source
559
4
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
IdenticalExprChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::FindIdenticalExprChecker>(void*)
Line
Count
Source
559
66
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
InnerPointerChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::InnerPointerChecker>(void*)
Line
Count
Source
559
2
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
IteratorChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::IteratorChecker>(void*)
Line
Count
Source
559
4
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
IvarInvalidationChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::IvarInvalidationChecker>(void*)
Line
Count
Source
559
3
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
Unexecuted instantiation: LLVMConventionsChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::LLVMConventionsChecker>(void*)
LocalizationChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NonLocalizedStringChecker>(void*)
Line
Count
Source
559
2
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
LocalizationChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::EmptyLocalizationContextChecker>(void*)
Line
Count
Source
559
1
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
LocalizationChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::PluralMisuseChecker>(void*)
Line
Count
Source
559
2
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
MacOSKeychainAPIChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::MacOSKeychainAPIChecker>(void*)
Line
Count
Source
559
13
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
MacOSXAPIChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::MacOSXAPIChecker>(void*)
Line
Count
Source
559
16
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
MallocChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::MallocChecker>(void*)
Line
Count
Source
559
142
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
MallocOverflowSecurityChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::MallocOverflowSecurityChecker>(void*)
Line
Count
Source
559
5
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
MallocSizeofChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::MallocSizeofChecker>(void*)
Line
Count
Source
559
19
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
MmapWriteExecChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::MmapWriteExecChecker>(void*)
Line
Count
Source
559
3
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
MisusedMovedObjectChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::MisusedMovedObjectChecker>(void*)
Line
Count
Source
559
3
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
void clang::ento::CheckerManager::destruct<clang::ento::mpi::MPIChecker>(void*)
Line
Count
Source
559
3
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
NSAutoreleasePoolChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NSAutoreleasePoolChecker>(void*)
Line
Count
Source
559
1
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
NSErrorChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NSErrorMethodChecker>(void*)
Line
Count
Source
559
14
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
NSErrorChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NSOrCFErrorDerefChecker>(void*)
Line
Count
Source
559
14
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
NSErrorChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CFErrorFunctionChecker>(void*)
Line
Count
Source
559
12
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
NoReturnFunctionChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NoReturnFunctionChecker>(void*)
Line
Count
Source
559
561
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
NonNullParamChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NonNullParamChecker>(void*)
Line
Count
Source
559
550
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
NonnullGlobalConstantsChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NonnullGlobalConstantsChecker>(void*)
Line
Count
Source
559
550
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
NullabilityChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NullabilityChecker>(void*)
Line
Count
Source
559
11
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
NumberObjectConversionChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::NumberObjectConversionChecker>(void*)
Line
Count
Source
559
20
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ObjCAtSyncChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCAtSyncChecker>(void*)
Line
Count
Source
559
8
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ObjCAutoreleaseWriteChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCAutoreleaseWriteChecker>(void*)
Line
Count
Source
559
15
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ObjCContainersASTChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCContainersASTChecker>(void*)
Line
Count
Source
559
13
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ObjCContainersChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCContainersChecker>(void*)
Line
Count
Source
559
12
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ObjCMissingSuperCallChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCSuperCallChecker>(void*)
Line
Count
Source
559
14
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ObjCPropertyChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCPropertyChecker>(void*)
Line
Count
Source
559
12
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ObjCSelfInitChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCSelfInitChecker>(void*)
Line
Count
Source
559
16
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ObjCSuperDeallocChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCSuperDeallocChecker>(void*)
Line
Count
Source
559
14
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ObjCUnusedIVarsChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ObjCUnusedIvarsChecker>(void*)
Line
Count
Source
559
14
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
PaddingChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::PaddingChecker>(void*)
Line
Count
Source
559
3
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
PointerArithChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::PointerArithChecker>(void*)
Line
Count
Source
559
69
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
PointerSubChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::PointerSubChecker>(void*)
Line
Count
Source
559
67
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
PthreadLockChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::PthreadLockChecker>(void*)
Line
Count
Source
559
5
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
RetainCountChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::RetainCountChecker>(void*)
Line
Count
Source
559
64
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ReturnPointerRangeChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ReturnPointerRangeChecker>(void*)
Line
Count
Source
559
4
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ReturnUndefChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ReturnUndefChecker>(void*)
Line
Count
Source
559
551
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
SimpleStreamChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::SimpleStreamChecker>(void*)
Line
Count
Source
559
5
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
StackAddrEscapeChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::StackAddrEscapeChecker>(void*)
Line
Count
Source
559
550
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
StdLibraryFunctionsChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::StdLibraryFunctionsChecker>(void*)
Line
Count
Source
559
23
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
StreamChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::StreamChecker>(void*)
Line
Count
Source
559
5
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
TaintTesterChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::TaintTesterChecker>(void*)
Line
Count
Source
559
4
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
TestAfterDivZeroChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::TestAfterDivZeroChecker>(void*)
Line
Count
Source
559
67
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
TraversalChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::TraversalDumper>(void*)
Line
Count
Source
559
4
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
Unexecuted instantiation: TraversalChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::CallDumper>(void*)
TrustNonnullChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::TrustNonnullChecker>(void*)
Line
Count
Source
559
3
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
UndefBranchChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::UndefBranchChecker>(void*)
Line
Count
Source
559
550
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
UndefCapturedBlockVarChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::UndefCapturedBlockVarChecker>(void*)
Line
Count
Source
559
550
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
UndefResultChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::UndefResultChecker>(void*)
Line
Count
Source
559
550
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
UndefinedArraySubscriptChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::UndefinedArraySubscriptChecker>(void*)
Line
Count
Source
559
550
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
UndefinedAssignmentChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::UndefinedAssignmentChecker>(void*)
Line
Count
Source
559
550
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
UninitializedObjectChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::UninitializedObjectChecker>(void*)
Line
Count
Source
559
7
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
UnixAPIChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::UnixAPIChecker>(void*)
Line
Count
Source
559
23
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
UnreachableCodeChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::UnreachableCodeChecker>(void*)
Line
Count
Source
559
9
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
VforkChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::VforkChecker>(void*)
Line
Count
Source
559
19
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
VLASizeChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::VLASizeChecker>(void*)
Line
Count
Source
559
550
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
ValistChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::ValistChecker>(void*)
Line
Count
Source
559
6
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
VirtualCallChecker.cpp:void clang::ento::CheckerManager::destruct<(anonymous namespace)::VirtualCallChecker>(void*)
Line
Count
Source
559
2
  static void destruct(void *obj) { delete static_cast<CHECKER *>(obj); }
560
561
  template <typename T>
562
15.5k
  static void *getTag() { static int tag; return &tag; }
AnalysisOrderChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::AnalysisOrderChecker>()
Line
Count
Source
562
6
  static void *getTag() { static int tag; return &tag; }
AnalyzerStatsChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::AnalyzerStatsChecker>()
Line
Count
Source
562
2
  static void *getTag() { static int tag; return &tag; }
ArrayBoundChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ArrayBoundChecker>()
Line
Count
Source
562
7
  static void *getTag() { static int tag; return &tag; }
ArrayBoundCheckerV2.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ArrayBoundCheckerV2>()
Line
Count
Source
562
8
  static void *getTag() { static int tag; return &tag; }
BasicObjCFoundationChecks.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NilArgChecker>()
Line
Count
Source
562
20
  static void *getTag() { static int tag; return &tag; }
BasicObjCFoundationChecks.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CFNumberChecker>()
Line
Count
Source
562
12
  static void *getTag() { static int tag; return &tag; }
BasicObjCFoundationChecks.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CFRetainReleaseChecker>()
Line
Count
Source
562
23
  static void *getTag() { static int tag; return &tag; }
BasicObjCFoundationChecks.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ClassReleaseChecker>()
Line
Count
Source
562
23
  static void *getTag() { static int tag; return &tag; }
BasicObjCFoundationChecks.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::VariadicMethodTypeChecker>()
Line
Count
Source
562
14
  static void *getTag() { static int tag; return &tag; }
BasicObjCFoundationChecks.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCLoopChecker>()
Line
Count
Source
562
15
  static void *getTag() { static int tag; return &tag; }
BasicObjCFoundationChecks.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCNonNilReturnValueChecker>()
Line
Count
Source
562
16
  static void *getTag() { static int tag; return &tag; }
BlockInCriticalSectionChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::BlockInCriticalSectionChecker>()
Line
Count
Source
562
6
  static void *getTag() { static int tag; return &tag; }
BoolAssignmentChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::BoolAssignmentChecker>()
Line
Count
Source
562
67
  static void *getTag() { static int tag; return &tag; }
BuiltinFunctionChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::BuiltinFunctionChecker>()
Line
Count
Source
562
560
  static void *getTag() { static int tag; return &tag; }
CStringChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CStringChecker>()
Line
Count
Source
562
312
  static void *getTag() { static int tag; return &tag; }
CStringSyntaxChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CStringSyntaxChecker>()
Line
Count
Source
562
43
  static void *getTag() { static int tag; return &tag; }
CallAndMessageChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CallAndMessageChecker>()
Line
Count
Source
562
616
  static void *getTag() { static int tag; return &tag; }
CastSizeChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CastSizeChecker>()
Line
Count
Source
562
58
  static void *getTag() { static int tag; return &tag; }
CastToStructChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CastToStructChecker>()
Line
Count
Source
562
71
  static void *getTag() { static int tag; return &tag; }
CheckObjCDealloc.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCDeallocChecker>()
Line
Count
Source
562
18
  static void *getTag() { static int tag; return &tag; }
CheckObjCInstMethSignature.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCMethSigsChecker>()
Line
Count
Source
562
15
  static void *getTag() { static int tag; return &tag; }
CheckSecuritySyntaxOnly.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::SecuritySyntaxChecker>()
Line
Count
Source
562
116
  static void *getTag() { static int tag; return &tag; }
CheckSizeofPointer.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::SizeofPointerChecker>()
Line
Count
Source
562
66
  static void *getTag() { static int tag; return &tag; }
ChrootChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ChrootChecker>()
Line
Count
Source
562
5
  static void *getTag() { static int tag; return &tag; }
CloneChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CloneChecker>()
Line
Count
Source
562
28
  static void *getTag() { static int tag; return &tag; }
ConversionChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ConversionChecker>()
Line
Count
Source
562
66
  static void *getTag() { static int tag; return &tag; }
CXXSelfAssignmentChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CXXSelfAssignmentChecker>()
Line
Count
Source
562
7
  static void *getTag() { static int tag; return &tag; }
DeadStoresChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::DeadStoresChecker>()
Line
Count
Source
562
23
  static void *getTag() { static int tag; return &tag; }
DebugCheckers.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::DominatorsTreeDumper>()
Line
Count
Source
562
1
  static void *getTag() { static int tag; return &tag; }
Unexecuted instantiation: DebugCheckers.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::LiveVariablesDumper>()
Unexecuted instantiation: DebugCheckers.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CFGViewer>()
DebugCheckers.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CFGDumper>()
Line
Count
Source
562
26
  static void *getTag() { static int tag; return &tag; }
Unexecuted instantiation: DebugCheckers.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CallGraphViewer>()
DebugCheckers.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CallGraphDumper>()
Line
Count
Source
562
1
  static void *getTag() { static int tag; return &tag; }
DebugCheckers.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ConfigDumper>()
Line
Count
Source
562
2
  static void *getTag() { static int tag; return &tag; }
Unexecuted instantiation: DebugCheckers.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ExplodedGraphViewer>()
DeleteWithNonVirtualDtorChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::DeleteWithNonVirtualDtorChecker>()
Line
Count
Source
562
2
  static void *getTag() { static int tag; return &tag; }
DereferenceChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::DereferenceChecker>()
Line
Count
Source
562
558
  static void *getTag() { static int tag; return &tag; }
void* clang::ento::CheckerManager::getTag<clang::ento::ImplicitNullDerefEvent>()
Line
Count
Source
562
4.16k
  static void *getTag() { static int tag; return &tag; }
DirectIvarAssignment.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::DirectIvarAssignment>()
Line
Count
Source
562
4
  static void *getTag() { static int tag; return &tag; }
DivZeroChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::DivZeroChecker>()
Line
Count
Source
562
557
  static void *getTag() { static int tag; return &tag; }
DynamicTypePropagation.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::DynamicTypePropagation>()
Line
Count
Source
562
567
  static void *getTag() { static int tag; return &tag; }
DynamicTypeChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::DynamicTypeChecker>()
Line
Count
Source
562
68
  static void *getTag() { static int tag; return &tag; }
ExprInspectionChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ExprInspectionChecker>()
Line
Count
Source
562
200
  static void *getTag() { static int tag; return &tag; }
FixedAddressChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::FixedAddressChecker>()
Line
Count
Source
562
67
  static void *getTag() { static int tag; return &tag; }
GCDAntipatternChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::GCDAntipatternChecker>()
Line
Count
Source
562
4
  static void *getTag() { static int tag; return &tag; }
GenericTaintChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::GenericTaintChecker>()
Line
Count
Source
562
11
  static void *getTag() { static int tag; return &tag; }
GTestChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::GTestChecker>()
Line
Count
Source
562
4
  static void *getTag() { static int tag; return &tag; }
IdenticalExprChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::FindIdenticalExprChecker>()
Line
Count
Source
562
66
  static void *getTag() { static int tag; return &tag; }
InnerPointerChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::InnerPointerChecker>()
Line
Count
Source
562
2
  static void *getTag() { static int tag; return &tag; }
IteratorChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::IteratorChecker>()
Line
Count
Source
562
4
  static void *getTag() { static int tag; return &tag; }
IvarInvalidationChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::IvarInvalidationChecker>()
Line
Count
Source
562
4
  static void *getTag() { static int tag; return &tag; }
Unexecuted instantiation: LLVMConventionsChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::LLVMConventionsChecker>()
LocalizationChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NonLocalizedStringChecker>()
Line
Count
Source
562
2
  static void *getTag() { static int tag; return &tag; }
LocalizationChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::EmptyLocalizationContextChecker>()
Line
Count
Source
562
1
  static void *getTag() { static int tag; return &tag; }
LocalizationChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::PluralMisuseChecker>()
Line
Count
Source
562
2
  static void *getTag() { static int tag; return &tag; }
MacOSKeychainAPIChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::MacOSKeychainAPIChecker>()
Line
Count
Source
562
13
  static void *getTag() { static int tag; return &tag; }
MacOSXAPIChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::MacOSXAPIChecker>()
Line
Count
Source
562
16
  static void *getTag() { static int tag; return &tag; }
MallocChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::MallocChecker>()
Line
Count
Source
562
211
  static void *getTag() { static int tag; return &tag; }
MallocOverflowSecurityChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::MallocOverflowSecurityChecker>()
Line
Count
Source
562
5
  static void *getTag() { static int tag; return &tag; }
MallocSizeofChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::MallocSizeofChecker>()
Line
Count
Source
562
19
  static void *getTag() { static int tag; return &tag; }
MmapWriteExecChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::MmapWriteExecChecker>()
Line
Count
Source
562
3
  static void *getTag() { static int tag; return &tag; }
MisusedMovedObjectChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::MisusedMovedObjectChecker>()
Line
Count
Source
562
3
  static void *getTag() { static int tag; return &tag; }
void* clang::ento::CheckerManager::getTag<clang::ento::mpi::MPIChecker>()
Line
Count
Source
562
3
  static void *getTag() { static int tag; return &tag; }
NSAutoreleasePoolChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NSAutoreleasePoolChecker>()
Line
Count
Source
562
1
  static void *getTag() { static int tag; return &tag; }
NSErrorChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NSErrorMethodChecker>()
Line
Count
Source
562
14
  static void *getTag() { static int tag; return &tag; }
NSErrorChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NSOrCFErrorDerefChecker>()
Line
Count
Source
562
26
  static void *getTag() { static int tag; return &tag; }
NSErrorChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CFErrorFunctionChecker>()
Line
Count
Source
562
12
  static void *getTag() { static int tag; return &tag; }
NoReturnFunctionChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NoReturnFunctionChecker>()
Line
Count
Source
562
561
  static void *getTag() { static int tag; return &tag; }
NonNullParamChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NonNullParamChecker>()
Line
Count
Source
562
550
  static void *getTag() { static int tag; return &tag; }
NonnullGlobalConstantsChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NonnullGlobalConstantsChecker>()
Line
Count
Source
562
550
  static void *getTag() { static int tag; return &tag; }
NullabilityChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NullabilityChecker>()
Line
Count
Source
562
46
  static void *getTag() { static int tag; return &tag; }
NumberObjectConversionChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::NumberObjectConversionChecker>()
Line
Count
Source
562
20
  static void *getTag() { static int tag; return &tag; }
ObjCAtSyncChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCAtSyncChecker>()
Line
Count
Source
562
8
  static void *getTag() { static int tag; return &tag; }
ObjCAutoreleaseWriteChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCAutoreleaseWriteChecker>()
Line
Count
Source
562
15
  static void *getTag() { static int tag; return &tag; }
ObjCContainersASTChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCContainersASTChecker>()
Line
Count
Source
562
13
  static void *getTag() { static int tag; return &tag; }
ObjCContainersChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCContainersChecker>()
Line
Count
Source
562
12
  static void *getTag() { static int tag; return &tag; }
ObjCMissingSuperCallChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCSuperCallChecker>()
Line
Count
Source
562
14
  static void *getTag() { static int tag; return &tag; }
ObjCPropertyChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCPropertyChecker>()
Line
Count
Source
562
12
  static void *getTag() { static int tag; return &tag; }
ObjCSelfInitChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCSelfInitChecker>()
Line
Count
Source
562
16
  static void *getTag() { static int tag; return &tag; }
ObjCSuperDeallocChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCSuperDeallocChecker>()
Line
Count
Source
562
14
  static void *getTag() { static int tag; return &tag; }
ObjCUnusedIVarsChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ObjCUnusedIvarsChecker>()
Line
Count
Source
562
14
  static void *getTag() { static int tag; return &tag; }
PaddingChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::PaddingChecker>()
Line
Count
Source
562
3
  static void *getTag() { static int tag; return &tag; }
PointerArithChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::PointerArithChecker>()
Line
Count
Source
562
69
  static void *getTag() { static int tag; return &tag; }
PointerSubChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::PointerSubChecker>()
Line
Count
Source
562
67
  static void *getTag() { static int tag; return &tag; }
PthreadLockChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::PthreadLockChecker>()
Line
Count
Source
562
5
  static void *getTag() { static int tag; return &tag; }
RetainCountChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::RetainCountChecker>()
Line
Count
Source
562
64
  static void *getTag() { static int tag; return &tag; }
ReturnPointerRangeChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ReturnPointerRangeChecker>()
Line
Count
Source
562
4
  static void *getTag() { static int tag; return &tag; }
ReturnUndefChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ReturnUndefChecker>()
Line
Count
Source
562
551
  static void *getTag() { static int tag; return &tag; }
SimpleStreamChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::SimpleStreamChecker>()
Line
Count
Source
562
5
  static void *getTag() { static int tag; return &tag; }
StackAddrEscapeChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::StackAddrEscapeChecker>()
Line
Count
Source
562
617
  static void *getTag() { static int tag; return &tag; }
StdLibraryFunctionsChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::StdLibraryFunctionsChecker>()
Line
Count
Source
562
23
  static void *getTag() { static int tag; return &tag; }
StreamChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::StreamChecker>()
Line
Count
Source
562
5
  static void *getTag() { static int tag; return &tag; }
TaintTesterChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::TaintTesterChecker>()
Line
Count
Source
562
4
  static void *getTag() { static int tag; return &tag; }
TestAfterDivZeroChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::TestAfterDivZeroChecker>()
Line
Count
Source
562
67
  static void *getTag() { static int tag; return &tag; }
TraversalChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::TraversalDumper>()
Line
Count
Source
562
4
  static void *getTag() { static int tag; return &tag; }
Unexecuted instantiation: TraversalChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::CallDumper>()
TrustNonnullChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::TrustNonnullChecker>()
Line
Count
Source
562
3
  static void *getTag() { static int tag; return &tag; }
UndefBranchChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::UndefBranchChecker>()
Line
Count
Source
562
550
  static void *getTag() { static int tag; return &tag; }
UndefCapturedBlockVarChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::UndefCapturedBlockVarChecker>()
Line
Count
Source
562
550
  static void *getTag() { static int tag; return &tag; }
UndefResultChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::UndefResultChecker>()
Line
Count
Source
562
550
  static void *getTag() { static int tag; return &tag; }
UndefinedArraySubscriptChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::UndefinedArraySubscriptChecker>()
Line
Count
Source
562
550
  static void *getTag() { static int tag; return &tag; }
UndefinedAssignmentChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::UndefinedAssignmentChecker>()
Line
Count
Source
562
550
  static void *getTag() { static int tag; return &tag; }
UninitializedObjectChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::UninitializedObjectChecker>()
Line
Count
Source
562
7
  static void *getTag() { static int tag; return &tag; }
UnixAPIChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::UnixAPIChecker>()
Line
Count
Source
562
26
  static void *getTag() { static int tag; return &tag; }
UnreachableCodeChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::UnreachableCodeChecker>()
Line
Count
Source
562
9
  static void *getTag() { static int tag; return &tag; }
VforkChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::VforkChecker>()
Line
Count
Source
562
19
  static void *getTag() { static int tag; return &tag; }
VLASizeChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::VLASizeChecker>()
Line
Count
Source
562
550
  static void *getTag() { static int tag; return &tag; }
ValistChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::ValistChecker>()
Line
Count
Source
562
12
  static void *getTag() { static int tag; return &tag; }
VirtualCallChecker.cpp:void* clang::ento::CheckerManager::getTag<(anonymous namespace)::VirtualCallChecker>()
Line
Count
Source
562
2
  static void *getTag() { static int tag; return &tag; }
563
564
  llvm::DenseMap<CheckerTag, CheckerRef> CheckerTags;
565
566
  std::vector<CheckerDtor> CheckerDtors;
567
568
  struct DeclCheckerInfo {
569
    CheckDeclFunc CheckFn;
570
    HandlesDeclFunc IsForDeclFn;
571
  };
572
  std::vector<DeclCheckerInfo> DeclCheckers;
573
574
  std::vector<CheckDeclFunc> BodyCheckers;
575
576
  using CachedDeclCheckers = SmallVector<CheckDeclFunc, 4>;
577
  using CachedDeclCheckersMapTy = llvm::DenseMap<unsigned, CachedDeclCheckers>;
578
  CachedDeclCheckersMapTy CachedDeclCheckersMap;
579
580
  struct StmtCheckerInfo {
581
    CheckStmtFunc CheckFn;
582
    HandlesStmtFunc IsForStmtFn;
583
    bool IsPreVisit;
584
  };
585
  std::vector<StmtCheckerInfo> StmtCheckers;
586
587
  using CachedStmtCheckers = SmallVector<CheckStmtFunc, 4>;
588
  using CachedStmtCheckersMapTy = llvm::DenseMap<unsigned, CachedStmtCheckers>;
589
  CachedStmtCheckersMapTy CachedStmtCheckersMap;
590
591
  const CachedStmtCheckers &getCachedStmtCheckersFor(const Stmt *S,
592
                                                     bool isPreVisit);
593
594
  /// Returns the checkers that have registered for callbacks of the
595
  /// given \p Kind.
596
  const std::vector<CheckObjCMessageFunc> &
597
  getObjCMessageCheckers(ObjCMessageVisitKind Kind);
598
599
  std::vector<CheckObjCMessageFunc> PreObjCMessageCheckers;
600
  std::vector<CheckObjCMessageFunc> PostObjCMessageCheckers;
601
  std::vector<CheckObjCMessageFunc> ObjCMessageNilCheckers;
602
603
  std::vector<CheckCallFunc> PreCallCheckers;
604
  std::vector<CheckCallFunc> PostCallCheckers;
605
606
  std::vector<CheckLocationFunc> LocationCheckers;
607
608
  std::vector<CheckBindFunc> BindCheckers;
609
610
  std::vector<CheckEndAnalysisFunc> EndAnalysisCheckers;
611
612
  std::vector<CheckBeginFunctionFunc> BeginFunctionCheckers;
613
  std::vector<CheckEndFunctionFunc> EndFunctionCheckers;
614
615
  std::vector<CheckBranchConditionFunc> BranchConditionCheckers;
616
617
  std::vector<CheckNewAllocatorFunc> NewAllocatorCheckers;
618
619
  std::vector<CheckLiveSymbolsFunc> LiveSymbolsCheckers;
620
621
  std::vector<CheckDeadSymbolsFunc> DeadSymbolsCheckers;
622
623
  std::vector<CheckRegionChangesFunc> RegionChangesCheckers;
624
625
  std::vector<CheckPointerEscapeFunc> PointerEscapeCheckers;
626
627
  std::vector<EvalAssumeFunc> EvalAssumeCheckers;
628
629
  std::vector<EvalCallFunc> EvalCallCheckers;
630
631
  std::vector<CheckEndOfTranslationUnit> EndOfTranslationUnitCheckers;
632
633
  struct EventInfo {
634
    SmallVector<CheckEventFunc, 4> Checkers;
635
    bool HasDispatcher = false;
636
637
558
    EventInfo() = default;
638
  };
639
  
640
  using EventsTy = llvm::DenseMap<EventTag, EventInfo>;
641
  EventsTy Events;
642
};
643
644
} // namespace ento
645
646
} // namespace clang
647
648
#endif // LLVM_CLANG_STATICANALYZER_CORE_CHECKERMANAGER_H