From: Ted Kremenek Date: Tue, 10 Mar 2009 02:50:49 +0000 (+0000) Subject: PathDiagnosticControlFlowPiece: X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=83d889b6e8b5b0bb7305cc1d1749780d205a6c9b;p=clang PathDiagnosticControlFlowPiece: - Correctly set "ControlFlow" kind (fix regression) PathDiagnosticMacroPiece: - add method "containsEvent" to determine if a PathDiagnosticMacroPiece transitively contains a PathDiagnosticEvent git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66519 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/PathDiagnostic.h b/include/clang/Analysis/PathDiagnostic.h index d5fa0a2192..f9e595f64c 100644 --- a/include/clang/Analysis/PathDiagnostic.h +++ b/include/clang/Analysis/PathDiagnostic.h @@ -75,7 +75,7 @@ public: meta_iterator meta_end() const { return OtherDesc.end(); } void addMeta(const std::string& s) { OtherDesc.push_back(s); } void addMeta(const char* s) { OtherDesc.push_back(s); } - + void push_front(PathDiagnosticPiece* piece) { path.push_front(piece); ++Size; @@ -97,6 +97,8 @@ public: unsigned size() const { return Size; } bool empty() const { return Size == 0; } + void resetPath(bool deletePieces = true); + class iterator { public: typedef std::list::iterator ImplTy; @@ -218,7 +220,7 @@ public: void addCodeModificationHint(const CodeModificationHint& Hint) { CodeModificationHints.push_back(Hint); } - + typedef const SourceRange* range_iterator; range_iterator ranges_begin() const { @@ -269,10 +271,10 @@ public: class PathDiagnosticControlFlowPiece : public PathDiagnosticPiece { public: PathDiagnosticControlFlowPiece(FullSourceLoc pos, const std::string& s) - : PathDiagnosticPiece(pos, s, Event) {} + : PathDiagnosticPiece(pos, s, ControlFlow) {} PathDiagnosticControlFlowPiece(FullSourceLoc pos, const char* s) - : PathDiagnosticPiece(pos, s, Event) {} + : PathDiagnosticPiece(pos, s, ControlFlow) {} ~PathDiagnosticControlFlowPiece(); @@ -284,20 +286,23 @@ public: class PathDiagnosticMacroPiece : public PathDiagnosticPiece { std::vector SubPieces; public: - PathDiagnosticMacroPiece(FullSourceLoc pos, const std::string& s) - : PathDiagnosticPiece(pos, s, Macro) {} - - PathDiagnosticMacroPiece(FullSourceLoc pos, const char* s) - : PathDiagnosticPiece(pos, s, Macro) {} + PathDiagnosticMacroPiece(FullSourceLoc pos) + : PathDiagnosticPiece(pos, "", Macro) {} ~PathDiagnosticMacroPiece(); + bool containsEvent() const; + void push_back(PathDiagnosticPiece* P) { SubPieces.push_back(P); } typedef std::vector::iterator iterator; iterator begin() { return SubPieces.begin(); } iterator end() { return SubPieces.end(); } + typedef std::vector::const_iterator const_iterator; + const_iterator begin() const { return SubPieces.begin(); } + const_iterator end() const { return SubPieces.end(); } + static inline bool classof(const PathDiagnosticPiece* P) { return P->getKind() == Macro; }