diff options
author | Eugene Zelenko <eugene.zelenko@gmail.com> | 2018-03-08 22:45:13 +0000 |
---|---|---|
committer | Eugene Zelenko <eugene.zelenko@gmail.com> | 2018-03-08 22:45:13 +0000 |
commit | 9f103a1a27aba3610fbe4647e5aaa8e5d21a2b75 (patch) | |
tree | 8bf04e8c59aa33e9fb2c4c9b556f4ada2db75d84 /clang/include | |
parent | 43095b2885fc944ee847eb4d210224874abcbd67 (diff) | |
download | bcm5719-llvm-9f103a1a27aba3610fbe4647e5aaa8e5d21a2b75.tar.gz bcm5719-llvm-9f103a1a27aba3610fbe4647e5aaa8e5d21a2b75.zip |
[StaticAnalyzer] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).
llvm-svn: 327074
Diffstat (limited to 'clang/include')
-rw-r--r-- | clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h | 50 | ||||
-rw-r--r-- | clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h | 218 |
2 files changed, 136 insertions, 132 deletions
diff --git a/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h b/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h index 2043896fd26..cb70c321cd8 100644 --- a/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h +++ b/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h @@ -1,4 +1,4 @@ -//===--- BugReporterVisitors.h - Generate PathDiagnostics -------*- C++ -*-===// +//===- BugReporterVisitors.h - Generate PathDiagnostics ---------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -15,11 +15,20 @@ #ifndef LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_BUGREPORTERVISITORS_H #define LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_BUGREPORTERVISITORS_H +#include "clang/Basic/LLVM.h" #include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h" #include "llvm/ADT/FoldingSet.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/StringRef.h" +#include <memory> namespace clang { + +class BinaryOperator; class CFGBlock; +class DeclRefExpr; +class Expr; +class Stmt; namespace ento { @@ -99,7 +108,7 @@ class FindLastStoreBRVisitor final : public BugReporterVisitorImpl<FindLastStoreBRVisitor> { const MemRegion *R; SVal V; - bool Satisfied; + bool Satisfied = false; /// If the visitor is tracking the value directly responsible for the /// bug, we are going to employ false positive suppression. @@ -113,10 +122,7 @@ public: FindLastStoreBRVisitor(KnownSVal V, const MemRegion *R, bool InEnableNullFPSuppression) - : R(R), - V(V), - Satisfied(false), - EnableNullFPSuppression(InEnableNullFPSuppression) {} + : R(R), V(V), EnableNullFPSuppression(InEnableNullFPSuppression) {} void Profile(llvm::FoldingSetNodeID &ID) const override; @@ -130,18 +136,17 @@ class TrackConstraintBRVisitor final : public BugReporterVisitorImpl<TrackConstraintBRVisitor> { DefinedSVal Constraint; bool Assumption; - bool IsSatisfied; + bool IsSatisfied = false; bool IsZeroCheck; /// We should start tracking from the last node along the path in which the /// value is constrained. - bool IsTrackingTurnedOn; + bool IsTrackingTurnedOn = false; public: TrackConstraintBRVisitor(DefinedSVal constraint, bool assumption) - : Constraint(constraint), Assumption(assumption), IsSatisfied(false), - IsZeroCheck(!Assumption && Constraint.getAs<Loc>()), - IsTrackingTurnedOn(false) {} + : Constraint(constraint), Assumption(assumption), + IsZeroCheck(!Assumption && Constraint.getAs<Loc>()) {} void Profile(llvm::FoldingSetNodeID &ID) const override; @@ -157,7 +162,6 @@ public: private: /// Checks if the constraint is valid in the current state. bool isUnderconstrained(const ExplodedNode *N) const; - }; /// \class NilReceiverBRVisitor @@ -165,7 +169,6 @@ private: class NilReceiverBRVisitor final : public BugReporterVisitorImpl<NilReceiverBRVisitor> { public: - void Profile(llvm::FoldingSetNodeID &ID) const override { static int x = 0; ID.AddPointer(&x); @@ -184,7 +187,6 @@ public: /// Visitor that tries to report interesting diagnostics from conditions. class ConditionBRVisitor final : public BugReporterVisitorImpl<ConditionBRVisitor> { - // FIXME: constexpr initialization isn't supported by MSVC2013. static const char *const GenericTrueMessage; static const char *const GenericFalseMessage; @@ -277,7 +279,6 @@ public: /// if the region's contents are not modified/accessed by the call. class UndefOrNullArgVisitor final : public BugReporterVisitorImpl<UndefOrNullArgVisitor> { - /// The interesting memory region this visitor is tracking. const MemRegion *R; @@ -303,14 +304,14 @@ class SuppressInlineDefensiveChecksVisitor final DefinedSVal V; /// Track if we found the node where the constraint was first added. - bool IsSatisfied; + bool IsSatisfied = false; /// Since the visitors can be registered on nodes previous to the last /// node in the BugReport, but the path traversal always starts with the last /// node, the visitor invariant (that we start with a node in which V is null) /// might not hold when node visitation starts. We are going to start tracking /// from the last node in which the value is null. - bool IsTrackingTurnedOn; + bool IsTrackingTurnedOn = false; public: SuppressInlineDefensiveChecksVisitor(DefinedSVal Val, const ExplodedNode *N); @@ -328,12 +329,11 @@ public: }; class CXXSelfAssignmentBRVisitor final - : public BugReporterVisitorImpl<CXXSelfAssignmentBRVisitor> { - - bool Satisfied; + : public BugReporterVisitorImpl<CXXSelfAssignmentBRVisitor> { + bool Satisfied = false; public: - CXXSelfAssignmentBRVisitor() : Satisfied(false) {} + CXXSelfAssignmentBRVisitor() = default; void Profile(llvm::FoldingSetNodeID &ID) const override {} @@ -370,10 +370,10 @@ const Stmt *GetDenomExpr(const ExplodedNode *N); const Stmt *GetRetValExpr(const ExplodedNode *N); bool isDeclRefExprToReference(const Expr *E); +} // namespace bugreporter -} // end namespace clang -} // end namespace ento -} // end namespace bugreporter +} // namespace ento +} // namespace clang -#endif +#endif // LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_BUGREPORTERVISITORS_H diff --git a/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h b/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h index 2adc09cd8db..421369e1929 100644 --- a/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h +++ b/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h @@ -1,4 +1,4 @@ -//===--- PathDiagnostic.h - Path-Specific Diagnostic Handling ---*- C++ -*-===// +//===- PathDiagnostic.h - Path-Specific Diagnostic Handling -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -14,39 +14,49 @@ #ifndef LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_PATHDIAGNOSTIC_H #define LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_PATHDIAGNOSTIC_H -#include "clang/Analysis/ProgramPoint.h" +#include "clang/AST/Stmt.h" +#include "clang/Analysis/AnalysisDeclContext.h" +#include "clang/Basic/LLVM.h" #include "clang/Basic/SourceLocation.h" +#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/FoldingSet.h" -#include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/PointerUnion.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/Allocator.h" +#include <cassert> #include <deque> #include <iterator> #include <list> #include <map> +#include <memory> #include <set> #include <string> +#include <utility> #include <vector> namespace clang { -class ConditionalOperator; + class AnalysisDeclContext; class BinaryOperator; -class CompoundStmt; +class CallEnter; +class CallExitEnd; +class CallExpr; +class ConditionalOperator; class Decl; +class Expr; class LocationContext; class MemberExpr; -class ParentMap; class ProgramPoint; class SourceManager; -class Stmt; -class CallExpr; namespace ento { class ExplodedNode; class SymExpr; -typedef const SymExpr* SymbolRef; + +using SymbolRef = const SymExpr *; //===----------------------------------------------------------------------===// // High-level interface for handlers of path-sensitive diagnostics. @@ -60,7 +70,7 @@ public: public: PDFileEntry(llvm::FoldingSetNodeID &NodeID) : NodeID(NodeID) {} - typedef std::vector<std::pair<StringRef, StringRef> > ConsumerFiles; + using ConsumerFiles = std::vector<std::pair<StringRef, StringRef>>; /// \brief A vector of <consumer,file> pairs. ConsumerFiles files; @@ -90,8 +100,9 @@ public: private: virtual void anchor(); + public: - PathDiagnosticConsumer() : flushed(false) {} + PathDiagnosticConsumer() = default; virtual ~PathDiagnosticConsumer(); void FlushDiagnostics(FilesMade *FilesMade); @@ -104,6 +115,7 @@ public: void HandlePathDiagnostic(std::unique_ptr<PathDiagnostic> D); enum PathGenerationScheme { None, Minimal, Extensive, AlternateExtensive }; + virtual PathGenerationScheme getGenerationScheme() const { return Minimal; } virtual bool supportsLogicalOpControlFlow() const { return false; } @@ -112,7 +124,7 @@ public: virtual bool supportsCrossFileDiagnostics() const { return false; } protected: - bool flushed; + bool flushed = false; llvm::FoldingSet<PathDiagnostic> Diags; }; @@ -122,31 +134,28 @@ protected: class PathDiagnosticRange : public SourceRange { public: - bool isPoint; + bool isPoint = false; PathDiagnosticRange(SourceRange R, bool isP = false) - : SourceRange(R), isPoint(isP) {} - - PathDiagnosticRange() : isPoint(false) {} + : SourceRange(R), isPoint(isP) {} + PathDiagnosticRange() = default; }; -typedef llvm::PointerUnion<const LocationContext*, AnalysisDeclContext*> - LocationOrAnalysisDeclContext; +using LocationOrAnalysisDeclContext = + llvm::PointerUnion<const LocationContext *, AnalysisDeclContext *>; class PathDiagnosticLocation { private: - enum Kind { RangeK, SingleLocK, StmtK, DeclK } K; - const Stmt *S; - const Decl *D; - const SourceManager *SM; + enum Kind { RangeK, SingleLocK, StmtK, DeclK } K = SingleLocK; + + const Stmt *S = nullptr; + const Decl *D = nullptr; + const SourceManager *SM = nullptr; FullSourceLoc Loc; PathDiagnosticRange Range; - PathDiagnosticLocation(SourceLocation L, const SourceManager &sm, - Kind kind) - : K(kind), S(nullptr), D(nullptr), SM(&sm), - Loc(genLocation(L)), Range(genRange()) { - } + PathDiagnosticLocation(SourceLocation L, const SourceManager &sm, Kind kind) + : K(kind), SM(&sm), Loc(genLocation(L)), Range(genRange()) {} FullSourceLoc genLocation( SourceLocation L = SourceLocation(), @@ -157,18 +166,15 @@ private: public: /// Create an invalid location. - PathDiagnosticLocation() - : K(SingleLocK), S(nullptr), D(nullptr), SM(nullptr) {} + PathDiagnosticLocation() = default; /// Create a location corresponding to the given statement. PathDiagnosticLocation(const Stmt *s, const SourceManager &sm, LocationOrAnalysisDeclContext lac) - : K(s->getLocStart().isValid() ? StmtK : SingleLocK), - S(K == StmtK ? s : nullptr), - D(nullptr), SM(&sm), - Loc(genLocation(SourceLocation(), lac)), - Range(genRange(lac)) { + : K(s->getLocStart().isValid() ? StmtK : SingleLocK), + S(K == StmtK ? s : nullptr), SM(&sm), + Loc(genLocation(SourceLocation(), lac)), Range(genRange(lac)) { assert(K == SingleLocK || S); assert(K == SingleLocK || Loc.isValid()); assert(K == SingleLocK || Range.isValid()); @@ -176,8 +182,7 @@ public: /// Create a location corresponding to the given declaration. PathDiagnosticLocation(const Decl *d, const SourceManager &sm) - : K(DeclK), S(nullptr), D(d), SM(&sm), - Loc(genLocation()), Range(genRange()) { + : K(DeclK), D(d), SM(&sm), Loc(genLocation()), Range(genRange()) { assert(D); assert(Loc.isValid()); assert(Range.isValid()); @@ -187,8 +192,7 @@ public: /// /// This should only be used if there are no more appropriate constructors. PathDiagnosticLocation(SourceLocation loc, const SourceManager &sm) - : K(SingleLocK), S(nullptr), D(nullptr), SM(&sm), Loc(loc, sm), - Range(genRange()) { + : SM(&sm), Loc(loc, sm), Range(genRange()) { assert(Loc.isValid()); assert(Range.isValid()); } @@ -250,7 +254,7 @@ public: const SourceManager &SM); /// Create a location corresponding to the given valid ExplodedNode. - static PathDiagnosticLocation create(const ProgramPoint& P, + static PathDiagnosticLocation create(const ProgramPoint &P, const SourceManager &SMng); /// Create a location corresponding to the next valid ExplodedNode as end @@ -310,10 +314,11 @@ public: class PathDiagnosticLocationPair { private: PathDiagnosticLocation Start, End; + public: PathDiagnosticLocationPair(const PathDiagnosticLocation &start, const PathDiagnosticLocation &end) - : Start(start), End(end) {} + : Start(start), End(end) {} const PathDiagnosticLocation &getStart() const { return Start; } const PathDiagnosticLocation &getEnd() const { return End; } @@ -348,7 +353,7 @@ private: /// \brief In the containing bug report, this piece is the last piece from /// the main source file. - bool LastInMainSourceFile; + bool LastInMainSourceFile = false; /// A constant string that can be used to tag the PathDiagnosticPiece, /// typically with the identification of the creator. The actual pointer @@ -358,16 +363,14 @@ private: std::vector<SourceRange> ranges; - PathDiagnosticPiece() = delete; - PathDiagnosticPiece(const PathDiagnosticPiece &P) = delete; - void operator=(const PathDiagnosticPiece &P) = delete; - protected: PathDiagnosticPiece(StringRef s, Kind k, DisplayHint hint = Below); - PathDiagnosticPiece(Kind k, DisplayHint hint = Below); public: + PathDiagnosticPiece() = delete; + PathDiagnosticPiece(const PathDiagnosticPiece &) = delete; + PathDiagnosticPiece &operator=(const PathDiagnosticPiece &) = delete; virtual ~PathDiagnosticPiece(); StringRef getString() const { return str; } @@ -422,8 +425,8 @@ public: class PathPieces : public std::list<std::shared_ptr<PathDiagnosticPiece>> { void flattenTo(PathPieces &Primary, PathPieces &Current, bool ShouldFlattenMacros) const; -public: +public: PathPieces flatten(bool ShouldFlattenMacros) const { PathPieces Result; flattenTo(Result, Result, ShouldFlattenMacros); @@ -436,12 +439,13 @@ public: class PathDiagnosticSpotPiece : public PathDiagnosticPiece { private: PathDiagnosticLocation Pos; + public: PathDiagnosticSpotPiece(const PathDiagnosticLocation &pos, StringRef s, PathDiagnosticPiece::Kind k, bool addPosRange = true) - : PathDiagnosticPiece(s, k), Pos(pos) { + : PathDiagnosticPiece(s, k), Pos(pos) { assert(Pos.isValid() && Pos.asLocation().isValid() && "PathDiagnosticSpotPiece's must have a valid location."); if (addPosRange && Pos.hasRange()) addRange(Pos.asRange()); @@ -483,7 +487,7 @@ private: public: StackHintGeneratorForSymbol(SymbolRef S, StringRef M) : Sym(S), Msg(M) {} - ~StackHintGeneratorForSymbol() override {} + ~StackHintGeneratorForSymbol() override = default; /// \brief Search the call expression for the symbol Sym and dispatch the /// 'getMessageForX()' methods to construct a specific message. @@ -492,9 +496,11 @@ public: /// Produces the message of the following form: /// 'Msg via Nth parameter' virtual std::string getMessageForArg(const Expr *ArgE, unsigned ArgIndex); + virtual std::string getMessageForReturn(const CallExpr *CallExpr) { return Msg; } + virtual std::string getMessageForSymbolNotFound() { return Msg; } @@ -513,9 +519,8 @@ public: PathDiagnosticEventPiece(const PathDiagnosticLocation &pos, StringRef s, bool addPosRange = true, StackHintGenerator *stackHint = nullptr) - : PathDiagnosticSpotPiece(pos, s, Event, addPosRange), - CallStackHint(stackHint) {} - + : PathDiagnosticSpotPiece(pos, s, Event, addPosRange), + CallStackHint(stackHint) {} ~PathDiagnosticEventPiece() override; /// Mark the diagnostic piece as being potentially prunable. This @@ -539,30 +544,19 @@ public: std::string getCallStackMessage(const ExplodedNode *N) { if (CallStackHint) return CallStackHint->getMessage(N); - return ""; + return {}; } void dump() const override; - static inline bool classof(const PathDiagnosticPiece *P) { + static bool classof(const PathDiagnosticPiece *P) { return P->getKind() == Event; } }; class PathDiagnosticCallPiece : public PathDiagnosticPiece { - PathDiagnosticCallPiece(const Decl *callerD, - const PathDiagnosticLocation &callReturnPos) - : PathDiagnosticPiece(Call), Caller(callerD), Callee(nullptr), - NoExit(false), IsCalleeAnAutosynthesizedPropertyAccessor(false), - callReturn(callReturnPos) {} - - PathDiagnosticCallPiece(PathPieces &oldPath, const Decl *caller) - : PathDiagnosticPiece(Call), Caller(caller), Callee(nullptr), - NoExit(true), IsCalleeAnAutosynthesizedPropertyAccessor(false), - path(oldPath) {} - const Decl *Caller; - const Decl *Callee; + const Decl *Callee = nullptr; // Flag signifying that this diagnostic has only call enter and no matching // call exit. @@ -570,12 +564,20 @@ class PathDiagnosticCallPiece : public PathDiagnosticPiece { // Flag signifying that the callee function is an Objective-C autosynthesized // property getter or setter. - bool IsCalleeAnAutosynthesizedPropertyAccessor; + bool IsCalleeAnAutosynthesizedPropertyAccessor = false; // The custom string, which should appear after the call Return Diagnostic. // TODO: Should we allow multiple diagnostics? std::string CallStackMessage; + PathDiagnosticCallPiece(const Decl *callerD, + const PathDiagnosticLocation &callReturnPos) + : PathDiagnosticPiece(Call), Caller(callerD), NoExit(false), + callReturn(callReturnPos) {} + PathDiagnosticCallPiece(PathPieces &oldPath, const Decl *caller) + : PathDiagnosticPiece(Call), Caller(caller), NoExit(true), + path(oldPath) {} + public: PathDiagnosticLocation callEnter; PathDiagnosticLocation callEnterWithin; @@ -590,13 +592,9 @@ public: void setCallee(const CallEnter &CE, const SourceManager &SM); bool hasCallStackMessage() { return !CallStackMessage.empty(); } - void setCallStackMessage(StringRef st) { - CallStackMessage = st; - } + void setCallStackMessage(StringRef st) { CallStackMessage = st; } - PathDiagnosticLocation getLocation() const override { - return callEnter; - } + PathDiagnosticLocation getLocation() const override { return callEnter; } std::shared_ptr<PathDiagnosticEventPiece> getCallEnterEvent() const; std::shared_ptr<PathDiagnosticEventPiece> @@ -606,8 +604,8 @@ public: void flattenLocations() override { callEnter.flatten(); callReturn.flatten(); - for (PathPieces::iterator I = path.begin(), - E = path.end(); I != E; ++I) (*I)->flattenLocations(); + for (const auto &I : path) + I->flattenLocations(); } static std::shared_ptr<PathDiagnosticCallPiece> @@ -621,28 +619,29 @@ public: void Profile(llvm::FoldingSetNodeID &ID) const override; - static inline bool classof(const PathDiagnosticPiece *P) { + static bool classof(const PathDiagnosticPiece *P) { return P->getKind() == Call; } }; class PathDiagnosticControlFlowPiece : public PathDiagnosticPiece { std::vector<PathDiagnosticLocationPair> LPairs; + public: PathDiagnosticControlFlowPiece(const PathDiagnosticLocation &startPos, const PathDiagnosticLocation &endPos, StringRef s) - : PathDiagnosticPiece(s, ControlFlow) { - LPairs.push_back(PathDiagnosticLocationPair(startPos, endPos)); - } + : PathDiagnosticPiece(s, ControlFlow) { + LPairs.push_back(PathDiagnosticLocationPair(startPos, endPos)); + } PathDiagnosticControlFlowPiece(const PathDiagnosticLocation &startPos, const PathDiagnosticLocation &endPos) - : PathDiagnosticPiece(ControlFlow) { - LPairs.push_back(PathDiagnosticLocationPair(startPos, endPos)); - } + : PathDiagnosticPiece(ControlFlow) { + LPairs.push_back(PathDiagnosticLocationPair(startPos, endPos)); + } - ~PathDiagnosticControlFlowPiece() override; + ~PathDiagnosticControlFlowPiece() override; PathDiagnosticLocation getStartLocation() const { assert(!LPairs.empty() && @@ -670,20 +669,23 @@ public: return getStartLocation(); } - typedef std::vector<PathDiagnosticLocationPair>::iterator iterator; + using iterator = std::vector<PathDiagnosticLocationPair>::iterator; + iterator begin() { return LPairs.begin(); } - iterator end() { return LPairs.end(); } + iterator end() { return LPairs.end(); } void flattenLocations() override { - for (iterator I=begin(), E=end(); I!=E; ++I) I->flatten(); + for (auto &I : *this) + I.flatten(); } - typedef std::vector<PathDiagnosticLocationPair>::const_iterator - const_iterator; + using const_iterator = + std::vector<PathDiagnosticLocationPair>::const_iterator; + const_iterator begin() const { return LPairs.begin(); } - const_iterator end() const { return LPairs.end(); } + const_iterator end() const { return LPairs.end(); } - static inline bool classof(const PathDiagnosticPiece *P) { + static bool classof(const PathDiagnosticPiece *P) { return P->getKind() == ControlFlow; } @@ -695,8 +697,7 @@ public: class PathDiagnosticMacroPiece : public PathDiagnosticSpotPiece { public: PathDiagnosticMacroPiece(const PathDiagnosticLocation &pos) - : PathDiagnosticSpotPiece(pos, "", Macro) {} - + : PathDiagnosticSpotPiece(pos, "", Macro) {} ~PathDiagnosticMacroPiece() override; PathPieces subPieces; @@ -705,11 +706,11 @@ public: void flattenLocations() override { PathDiagnosticSpotPiece::flattenLocations(); - for (PathPieces::iterator I = subPieces.begin(), - E = subPieces.end(); I != E; ++I) (*I)->flattenLocations(); + for (const auto &I : subPieces) + I->flattenLocations(); } - static inline bool classof(const PathDiagnosticPiece *P) { + static bool classof(const PathDiagnosticPiece *P) { return P->getKind() == Macro; } @@ -723,10 +724,9 @@ public: PathDiagnosticNotePiece(const PathDiagnosticLocation &Pos, StringRef S, bool AddPosRange = true) : PathDiagnosticSpotPiece(Pos, S, Note, AddPosRange) {} - ~PathDiagnosticNotePiece() override; - static inline bool classof(const PathDiagnosticPiece *P) { + static bool classof(const PathDiagnosticPiece *P) { return P->getKind() == Note; } @@ -736,7 +736,7 @@ public: }; /// File IDs mapped to sets of line numbers. -typedef std::map<unsigned, std::set<unsigned>> FilesToLineNumsMap; +using FilesToLineNumsMap = std::map<unsigned, std::set<unsigned>>; /// PathDiagnostic - PathDiagnostic objects represent a single path-sensitive /// diagnostic. It represents an ordered-collection of PathDiagnosticPieces, @@ -764,14 +764,13 @@ class PathDiagnostic : public llvm::FoldingSetNode { /// Lines executed in the path. std::unique_ptr<FilesToLineNumsMap> ExecutedLines; - PathDiagnostic() = delete; public: + PathDiagnostic() = delete; PathDiagnostic(StringRef CheckName, const Decl *DeclWithIssue, StringRef bugtype, StringRef verboseDesc, StringRef shortDesc, StringRef category, PathDiagnosticLocation LocationToUnique, const Decl *DeclToUnique, std::unique_ptr<FilesToLineNumsMap> ExecutedLines); - ~PathDiagnostic(); const PathPieces &path; @@ -822,9 +821,11 @@ public: void resetDiagnosticLocationToMainFile(); StringRef getVerboseDescription() const { return VerboseDesc; } + StringRef getShortDescription() const { return ShortDesc.empty() ? VerboseDesc : ShortDesc; } + StringRef getCheckName() const { return CheckName; } StringRef getBugType() const { return BugType; } StringRef getCategory() const { return Category; } @@ -834,15 +835,18 @@ public: /// where the bug manifests. const Decl *getDeclWithIssue() const { return DeclWithIssue; } - typedef std::deque<std::string>::const_iterator meta_iterator; + using meta_iterator = std::deque<std::string>::const_iterator; + meta_iterator meta_begin() const { return OtherDesc.begin(); } meta_iterator meta_end() const { return OtherDesc.end(); } void addMeta(StringRef s) { OtherDesc.push_back(s); } - typedef FilesToLineNumsMap::const_iterator filesmap_iterator; + using filesmap_iterator = FilesToLineNumsMap::const_iterator; + filesmap_iterator executedLines_begin() const { return ExecutedLines->begin(); } + filesmap_iterator executedLines_end() const { return ExecutedLines->end(); } PathDiagnosticLocation getLocation() const { @@ -862,8 +866,8 @@ public: void flattenLocations() { Loc.flatten(); - for (PathPieces::iterator I = pathImpl.begin(), E = pathImpl.end(); - I != E; ++I) (*I)->flattenLocations(); + for (const auto &I : pathImpl) + I->flattenLocations(); } /// Profiles the diagnostic, independent of the path it references. @@ -879,8 +883,8 @@ public: void FullProfile(llvm::FoldingSetNodeID &ID) const; }; -} // end GR namespace +} // namespace ento -} //end clang namespace +} // namespace clang -#endif +#endif // LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_PATHDIAGNOSTIC_H |