Author: szelethus Date: Mon Aug 13 11:22:22 2018 New Revision: 339596 URL: http://llvm.org/viewvc/llvm-project?rev=339596&view=rev Log: [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 Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h?rev=339596&r1=339595&r2=339596&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h (original) +++ cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h Mon Aug 13 11:22:22 2018 @@ -35,6 +35,7 @@ namespace ento { /// constructor calls. class FieldChainInfo { public: + using FieldChainImpl = llvm::ImmutableListImpl<const FieldRegion *>; using FieldChain = llvm::ImmutableList<const FieldRegion *>; 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<const FieldRegion *> *L); friend struct FieldChainInfoComparator; }; Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp?rev=339596&r1=339595&r2=339596&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp Mon Aug 13 11:22:22 2018 @@ -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 *C /// (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::getEndO 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_ost if (Chain.isEmpty()) return; - const llvm::ImmutableListImpl<const FieldRegion *> *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<const FieldRegion *> *L) { +static void printTail(llvm::raw_ostream &Out, + const FieldChainInfo::FieldChainImpl *L) { if (!L) return; @@ -420,7 +425,7 @@ getObjectVal(const CXXConstructorDecl *C } static bool willObjectBeAnalyzedLater(const CXXConstructorDecl *Ctor, - CheckerContext &Context) { + CheckerContext &Context) { Optional<nonloc::LazyCompoundVal> CurrentObject = getObjectVal(Ctor, Context); if (!CurrentObject) Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp?rev=339596&r1=339595&r2=339596&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp Mon Aug 13 11:22:22 2018 @@ -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" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits