From: Kristof Umann Date: Mon, 13 Aug 2018 18:22:22 +0000 (+0000) Subject: [analyzer][UninitializedObjectChecker] Refactoring p3.: printTail moved out from... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2ed34ac16779a9c14234868cbbba3884763cc145;p=clang [analyzer][UninitializedObjectChecker] Refactoring p3.: printTail moved out from FieldChainInfo This is a standalone part of the effort to reduce FieldChainInfos inteerface. Differential Revision: https://reviews.llvm.org/D50505 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@339596 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h b/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h index 2aaf11af9c..15faf4bfa5 100644 --- a/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h +++ b/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h @@ -35,6 +35,7 @@ namespace ento { /// constructor calls. class FieldChainInfo { public: + using FieldChainImpl = llvm::ImmutableListImpl; using FieldChain = llvm::ImmutableList; private: @@ -48,7 +49,8 @@ public: FieldChainInfo(FieldChain::Factory &F) : Factory(F) {} FieldChainInfo(const FieldChainInfo &Other, const bool IsDereferenced) - : Factory(Other.Factory), Chain(Other.Chain), IsDereferenced(IsDereferenced) {} + : Factory(Other.Factory), Chain(Other.Chain), + IsDereferenced(IsDereferenced) {} FieldChainInfo(const FieldChainInfo &Other, const FieldRegion *FR, const bool IsDereferenced = false); @@ -64,12 +66,6 @@ public: void print(llvm::raw_ostream &Out) const; private: - /// Prints every element except the last to `Out`. Since ImmutableLists store - /// elements in reverse order, and have no reverse iterators, we use a - /// recursive function to print the fieldchain correctly. The last element in - /// the chain is to be printed by `print`. - static void printTail(llvm::raw_ostream &Out, - const llvm::ImmutableListImpl *L); friend struct FieldChainInfoComparator; }; diff --git a/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp b/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp index c54aff41f5..ad1a89e71b 100644 --- a/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp @@ -46,8 +46,8 @@ // //===----------------------------------------------------------------------===// -#include "UninitializedObject.h" #include "ClangSACheckers.h" +#include "UninitializedObject.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" #include "clang/StaticAnalyzer/Core/Checker.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h" @@ -87,7 +87,7 @@ getObjectVal(const CXXConstructorDecl *CtorDecl, CheckerContext &Context); /// (e.g. if the object is a field of another object, in which case we'd check /// it multiple times). static bool willObjectBeAnalyzedLater(const CXXConstructorDecl *Ctor, - CheckerContext &Context); + CheckerContext &Context); /// Constructs a note message for a given FieldChainInfo object. static void printNoteMessage(llvm::raw_ostream &Out, @@ -346,6 +346,13 @@ const FieldDecl *FieldChainInfo::getEndOfChain() const { return (*Chain.begin())->getDecl(); } +/// Prints every element except the last to `Out`. Since ImmutableLists store +/// elements in reverse order, and have no reverse iterators, we use a +/// recursive function to print the fieldchain correctly. The last element in +/// the chain is to be printed by `print`. +static void printTail(llvm::raw_ostream &Out, + const FieldChainInfo::FieldChainImpl *L); + // TODO: This function constructs an incorrect string if a void pointer is a // part of the chain: // @@ -383,15 +390,13 @@ void FieldChainInfo::print(llvm::raw_ostream &Out) const { if (Chain.isEmpty()) return; - const llvm::ImmutableListImpl *L = - Chain.getInternalPointer(); + const FieldChainImpl *L = Chain.getInternalPointer(); printTail(Out, L->getTail()); Out << getVariableName(L->getHead()->getDecl()); } -void FieldChainInfo::printTail( - llvm::raw_ostream &Out, - const llvm::ImmutableListImpl *L) { +static void printTail(llvm::raw_ostream &Out, + const FieldChainInfo::FieldChainImpl *L) { if (!L) return; @@ -420,7 +425,7 @@ getObjectVal(const CXXConstructorDecl *CtorDecl, CheckerContext &Context) { } static bool willObjectBeAnalyzedLater(const CXXConstructorDecl *Ctor, - CheckerContext &Context) { + CheckerContext &Context) { Optional CurrentObject = getObjectVal(Ctor, Context); if (!CurrentObject) diff --git a/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp b/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp index 3c3c256ad9..90d2ff0051 100644 --- a/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp +++ b/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp @@ -18,8 +18,8 @@ // //===----------------------------------------------------------------------===// -#include "UninitializedObject.h" #include "ClangSACheckers.h" +#include "UninitializedObject.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" #include "clang/StaticAnalyzer/Core/Checker.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"