diff options
Diffstat (limited to 'include/clang/Analysis/PathDiagnostic.h')
-rw-r--r-- | include/clang/Analysis/PathDiagnostic.h | 38 |
1 files changed, 9 insertions, 29 deletions
diff --git a/include/clang/Analysis/PathDiagnostic.h b/include/clang/Analysis/PathDiagnostic.h index 0635a01d7b..809c83161f 100644 --- a/include/clang/Analysis/PathDiagnostic.h +++ b/include/clang/Analysis/PathDiagnostic.h @@ -17,7 +17,6 @@ #include "clang/Basic/SourceManager.h" #include "clang/Basic/Diagnostic.h" #include "llvm/ADT/OwningPtr.h" -#include "llvm/ADT/FoldingSet.h" #include <vector> #include <deque> @@ -25,17 +24,12 @@ #include <algorithm> namespace clang { - -class Stmt; -class Decl; -class Preprocessor; - + //===----------------------------------------------------------------------===// // High-level interface for handlers of path-sensitive diagnostics. //===----------------------------------------------------------------------===// class PathDiagnostic; - class Stmt; class Decl; class Preprocessor; @@ -44,9 +38,12 @@ class PathDiagnosticClient : public DiagnosticClient { public: PathDiagnosticClient() {} virtual ~PathDiagnosticClient() {} + virtual void SetPreprocessor(Preprocessor *PP) {} + virtual void HandleDiagnostic(Diagnostic::Level DiagLevel, const DiagnosticInfo &Info); + virtual void HandlePathDiagnostic(const PathDiagnostic* D) = 0; enum PathGenerationScheme { Minimal, Extensive }; @@ -128,8 +125,6 @@ public: void flatten(); const SourceManager& getManager() const { assert(isValid()); return *SM; } - - void Profile(llvm::FoldingSetNodeID &ID) const; }; class PathDiagnosticLocationPair { @@ -147,11 +142,6 @@ public: Start.flatten(); End.flatten(); } - - void Profile(llvm::FoldingSetNodeID &ID) const { - Start.Profile(ID); - End.Profile(ID); - } }; //===----------------------------------------------------------------------===// @@ -230,8 +220,6 @@ public: static inline bool classof(const PathDiagnosticPiece* P) { return true; } - - virtual void Profile(llvm::FoldingSetNodeID &ID) const; }; class PathDiagnosticSpotPiece : public PathDiagnosticPiece { @@ -250,8 +238,6 @@ public: PathDiagnosticLocation getLocation() const { return Pos; } virtual void flattenLocations() { Pos.flatten(); } - - virtual void Profile(llvm::FoldingSetNodeID &ID) const; }; class PathDiagnosticEventPiece : public PathDiagnosticSpotPiece { @@ -331,8 +317,6 @@ public: static inline bool classof(const PathDiagnosticPiece* P) { return P->getKind() == ControlFlow; } - - virtual void Profile(llvm::FoldingSetNodeID &ID) const; }; class PathDiagnosticMacroPiece : public PathDiagnosticSpotPiece { @@ -363,14 +347,12 @@ public: static inline bool classof(const PathDiagnosticPiece* P) { return P->getKind() == Macro; } - - virtual void Profile(llvm::FoldingSetNodeID &ID) const; }; /// PathDiagnostic - PathDiagnostic objects represent a single path-sensitive /// diagnostic. It represents an ordered-collection of PathDiagnosticPieces, /// each which represent the pieces of the path. -class PathDiagnostic : public llvm::FoldingSetNode { +class PathDiagnostic { std::deque<PathDiagnosticPiece*> path; unsigned Size; std::string BugType; @@ -404,13 +386,11 @@ public: } void push_front(PathDiagnosticPiece* piece) { - assert(piece); path.push_front(piece); ++Size; } void push_back(PathDiagnosticPiece* piece) { - assert(piece); path.push_back(piece); ++Size; } @@ -473,7 +453,7 @@ public: bool operator==(const const_iterator& X) const { return I == X.I; } bool operator!=(const const_iterator& X) const { return I != X.I; } - reference operator*() const { assert(*I); return **I; } + reference operator*() const { return **I; } pointer operator->() const { return *I; } const_iterator& operator++() { ++I; return *this; } @@ -500,8 +480,8 @@ public: void flattenLocations() { for (iterator I = begin(), E = end(); I != E; ++I) I->flattenLocations(); } - - void Profile(llvm::FoldingSetNodeID &ID) const; -}; +}; + + } //end clang namespace #endif |