diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-03-10 05:16:17 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-03-10 05:16:17 +0000 |
commit | 0e5c8d4ca6c7e472ddde13495c8d3558983de85a (patch) | |
tree | 8b1bb76cc882b981616b3e238d38bf822c698a79 /lib/Analysis/PathDiagnostic.cpp | |
parent | 2223622d113d7cba04c2dfdbe032e2ba6ba10bc4 (diff) |
BugReporter:
- Group control flow and event PathDiagnosticPieces into PathDiagnosticMacroPieces.
- Afterwards, eliminate any PathDiagnosticMacroPieces from a PathDiagnostic that
contain no informative events.
HTMLDiagnostics:
- Use new information about PathDiagnosticMacroPieces to specially format
message bubbles for macro expansions containing interesting events.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66524 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/PathDiagnostic.cpp')
-rw-r--r-- | lib/Analysis/PathDiagnostic.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/Analysis/PathDiagnostic.cpp b/lib/Analysis/PathDiagnostic.cpp index ae53ed9dbf..a504e80b59 100644 --- a/lib/Analysis/PathDiagnostic.cpp +++ b/lib/Analysis/PathDiagnostic.cpp @@ -13,8 +13,24 @@ #include "clang/Analysis/PathDiagnostic.h" #include "llvm/ADT/SmallString.h" +#include "llvm/Support/Casting.h" #include <sstream> using namespace clang; +using llvm::dyn_cast; +using llvm::isa; + +bool PathDiagnosticMacroPiece::containsEvent() const { + for (const_iterator I = begin(), E = end(); I!=E; ++I) { + if (isa<PathDiagnosticEventPiece>(*I)) + return true; + + if (PathDiagnosticMacroPiece *MP = dyn_cast<PathDiagnosticMacroPiece>(*I)) + if (MP->containsEvent()) + return true; + } + + return false; +} static size_t GetNumCharsToLastNonPeriod(const char *s) { const char *start = s; @@ -63,6 +79,16 @@ PathDiagnostic::~PathDiagnostic() { for (iterator I = begin(), E = end(); I != E; ++I) delete &*I; } +void PathDiagnostic::resetPath(bool deletePieces) { + Size = 0; + + if (deletePieces) + for (iterator I=begin(), E=end(); I!=E; ++I) + delete &*I; + + path.clear(); +} + PathDiagnostic::PathDiagnostic(const char* bugtype, const char* desc, const char* category) |