Index: lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h =================================================================== --- lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h +++ lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h @@ -35,6 +35,7 @@ /// constructor calls. class FieldChainInfo { public: + using FieldChainImpl = llvm::ImmutableListImpl; using FieldChain = llvm::ImmutableList; private: @@ -48,7 +49,8 @@ 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 @@ 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; }; Index: lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp =================================================================== --- lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp +++ 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 @@ /// (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 @@ 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 @@ 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 @@ } static bool willObjectBeAnalyzedLater(const CXXConstructorDecl *Ctor, - CheckerContext &Context) { + CheckerContext &Context) { Optional CurrentObject = getObjectVal(Ctor, Context); if (!CurrentObject) Index: lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp =================================================================== --- lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp +++ 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"