Coverage Report

Created: 2019-02-21 13:17

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