From 6a6fe18b27c0ce2706287557aba7667c64edef6d Mon Sep 17 00:00:00 2001 From: Kristof Umann Date: Mon, 13 Aug 2018 17:55:52 +0000 Subject: [PATCH] [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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@339591 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Checkers/UninitializedObjectChecker.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp b/lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp index 7dee35e294..ba8132204c 100644 --- a/lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp +++ b/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; +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 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(); -- 2.50.1