[PATCH] D50503: [analyzer][UninitializedObjectChecker] Refactoring p1.: ImmutableList factory is no longer static
Umann Kristóf via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 9 04:10:39 PDT 2018
Szelethus created this revision.
Szelethus added reviewers: NoQ, xazax.hun, rnkovacs, george.karpenkov.
Herald added subscribers: cfe-commits, mikhail.ramalho, a.sidorin, szepet, whisperity.
This diff 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 patch, `ImmutableList`'s factory is moved to `FindUninitializedFields`.
Repository:
rC Clang
https://reviews.llvm.org/D50503
Files:
lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp
Index: lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp
===================================================================
--- lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp
+++ lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp
@@ -73,17 +73,21 @@
/// Note that this class is immutable, and new fields may only be added through
/// constructor calls.
class FieldChainInfo {
+public:
using FieldChain = llvm::ImmutableList<const FieldRegion *>;
+private:
+ FieldChain::Factory &Factory;
FieldChain Chain;
const bool IsDereferenced = false;
public:
- FieldChainInfo() = default;
+ FieldChainInfo() = delete;
+ FieldChainInfo(FieldChain::Factory &F) : Factory(F) {}
FieldChainInfo(const FieldChainInfo &Other, const bool IsDereferenced)
- : Chain(Other.Chain), IsDereferenced(IsDereferenced) {}
+ : Factory(Other.Factory), Chain(Other.Chain), IsDereferenced(IsDereferenced) {}
FieldChainInfo(const FieldChainInfo &Other, const FieldRegion *FR,
const bool IsDereferenced = false);
@@ -128,6 +132,7 @@
bool IsAnyFieldInitialized = false;
+ FieldChainInfo::FieldChain::Factory Factory;
UninitFieldSet UninitFields;
public:
@@ -217,10 +222,6 @@
} // end of anonymous namespace
-// Static variable instantionations.
-
-static llvm::ImmutableListFactory<const FieldRegion *> Factory;
-
// Utility function declarations.
/// Returns the object that was constructed by CtorDecl, or None if that isn't
@@ -355,7 +356,7 @@
CheckPointeeInitialization(CheckPointeeInitialization) {}
const UninitFieldSet &FindUninitializedFields::getUninitFields() {
- isNonUnionUninit(ObjectR, FieldChainInfo());
+ isNonUnionUninit(ObjectR, FieldChainInfo(Factory));
if (!IsPedantic && !IsAnyFieldInitialized)
UninitFields.clear();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50503.159889.patch
Type: text/x-patch
Size: 1839 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180809/31a212a6/attachment-0001.bin>
More information about the cfe-commits
mailing list