Skip to content

Commit ea7cb67

Browse files
committedAug 13, 2018
[analyzer][UninitializedObjectChecker] Refactoring p1.: ImmutableList factory is no longer static
This patch is the first part of a series of patches to refactor UninitializedObjectChecker. The goal of this effort is to Separate pointer chasing from the rest of the checker, Increase readability and reliability, Don't impact performance (too bad). In this one, ImmutableList's factory is moved to FindUninitializedFields. Differential Revision: https://reviews.llvm.org/D50503 llvm-svn: 339591
1 parent fd70971 commit ea7cb67

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed
 

‎clang/lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -73,17 +73,21 @@ class UninitializedObjectChecker : public Checker<check::EndFunction> {
7373
/// Note that this class is immutable, and new fields may only be added through
7474
/// constructor calls.
7575
class FieldChainInfo {
76+
public:
7677
using FieldChain = llvm::ImmutableList<const FieldRegion *>;
7778

79+
private:
80+
FieldChain::Factory &Factory;
7881
FieldChain Chain;
7982

8083
const bool IsDereferenced = false;
8184

8285
public:
83-
FieldChainInfo() = default;
86+
FieldChainInfo() = delete;
87+
FieldChainInfo(FieldChain::Factory &F) : Factory(F) {}
8488

8589
FieldChainInfo(const FieldChainInfo &Other, const bool IsDereferenced)
86-
: Chain(Other.Chain), IsDereferenced(IsDereferenced) {}
90+
: Factory(Other.Factory), Chain(Other.Chain), IsDereferenced(IsDereferenced) {}
8791

8892
FieldChainInfo(const FieldChainInfo &Other, const FieldRegion *FR,
8993
const bool IsDereferenced = false);
@@ -128,6 +132,7 @@ class FindUninitializedFields {
128132

129133
bool IsAnyFieldInitialized = false;
130134

135+
FieldChainInfo::FieldChain::Factory Factory;
131136
UninitFieldSet UninitFields;
132137

133138
public:
@@ -217,10 +222,6 @@ class FindUninitializedFields {
217222

218223
} // end of anonymous namespace
219224

220-
// Static variable instantionations.
221-
222-
static llvm::ImmutableListFactory<const FieldRegion *> Factory;
223-
224225
// Utility function declarations.
225226

226227
/// Returns the object that was constructed by CtorDecl, or None if that isn't
@@ -355,7 +356,7 @@ FindUninitializedFields::FindUninitializedFields(
355356
CheckPointeeInitialization(CheckPointeeInitialization) {}
356357

357358
const UninitFieldSet &FindUninitializedFields::getUninitFields() {
358-
isNonUnionUninit(ObjectR, FieldChainInfo());
359+
isNonUnionUninit(ObjectR, FieldChainInfo(Factory));
359360

360361
if (!IsPedantic && !IsAnyFieldInitialized)
361362
UninitFields.clear();

0 commit comments

Comments
 (0)
Please sign in to comment.