summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristof Umann <dkszelethus@gmail.com>2018-08-13 17:55:52 +0000
committerKristof Umann <dkszelethus@gmail.com>2018-08-13 17:55:52 +0000
commitea7cb67581e4cb2b3f574d2991ddbc740aac396c (patch)
tree81107b6594f821fcf2562f7d485a43546303fdee
parentfd709711e25bbd1873bdd6d4c32bd75e1525ed28 (diff)
downloadbcm5719-llvm-ea7cb67581e4cb2b3f574d2991ddbc740aac396c.tar.gz
bcm5719-llvm-ea7cb67581e4cb2b3f574d2991ddbc740aac396c.zip
[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
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp
index 7dee35e2946..ba8132204cc 100644
--- a/clang/lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp
@@ -73,17 +73,21 @@ public:
/// 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 @@ class FindUninitializedFields {
bool IsAnyFieldInitialized = false;
+ FieldChainInfo::FieldChain::Factory Factory;
UninitFieldSet UninitFields;
public:
@@ -217,10 +222,6 @@ private:
} // 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 @@ FindUninitializedFields::FindUninitializedFields(
CheckPointeeInitialization(CheckPointeeInitialization) {}
const UninitFieldSet &FindUninitializedFields::getUninitFields() {
- isNonUnionUninit(ObjectR, FieldChainInfo());
+ isNonUnionUninit(ObjectR, FieldChainInfo(Factory));
if (!IsPedantic && !IsAnyFieldInitialized)
UninitFields.clear();
OpenPOWER on IntegriCloud