Coverage Report

Created: 2018-11-16 02:38

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