[cfe-commits] r149960 - in /cfe/trunk: include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h lib/StaticAnalyzer/Core/BugReporterVisitors.cpp lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp lib/StaticAnalyzer/Core/PathDiagnostic.cpp lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
Ted Kremenek
kremenek at apple.com
Mon Feb 6 18:27:38 PST 2012
Author: kremenek
Date: Mon Feb 6 20:27:37 2012
New Revision: 149960
URL: http://llvm.org/viewvc/llvm-project?rev=149960&view=rev
Log:
Create PathDiagnosticCallEnter and PathDiagnosticCallExit, to remark calls in PathDiagnostics from other events. This will
have potential uses later.
Modified:
cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h?rev=149960&r1=149959&r2=149960&view=diff
==============================================================================
--- cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h (original)
+++ cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h Mon Feb 6 20:27:37 2012
@@ -261,7 +261,7 @@
class PathDiagnosticPiece {
public:
- enum Kind { ControlFlow, Event, Macro };
+ enum Kind { ControlFlow, Event, Macro, CallEnter, CallExit };
enum DisplayHint { Above, Below };
private:
@@ -356,6 +356,32 @@
return P->getKind() == Event;
}
};
+
+class PathDiagnosticCallEnterPiece : public PathDiagnosticSpotPiece {
+public:
+ PathDiagnosticCallEnterPiece(const PathDiagnosticLocation &pos,
+ StringRef s)
+ : PathDiagnosticSpotPiece(pos, s, CallEnter, false) {}
+
+ ~PathDiagnosticCallEnterPiece();
+
+ static inline bool classof(const PathDiagnosticPiece *P) {
+ return P->getKind() == CallEnter;
+ }
+};
+
+class PathDiagnosticCallExitPiece : public PathDiagnosticSpotPiece {
+public:
+ PathDiagnosticCallExitPiece(const PathDiagnosticLocation &pos,
+ StringRef s)
+ : PathDiagnosticSpotPiece(pos, s, CallExit, false) {}
+
+ ~PathDiagnosticCallExitPiece();
+
+ static inline bool classof(const PathDiagnosticPiece *P) {
+ return P->getKind() == CallExit;
+ }
+};
class PathDiagnosticControlFlowPiece : public PathDiagnosticPiece {
std::vector<PathDiagnosticLocationPair> LPairs;
Modified: cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp?rev=149960&r1=149959&r2=149960&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp Mon Feb 6 20:27:37 2012
@@ -758,6 +758,10 @@
Out << "Entering call to block";
else if (const NamedDecl *ND = dyn_cast<NamedDecl>(callee))
Out << "Entering call to '" << ND->getNameAsString() << "'";
+ StringRef msg = Out.str();
+ if (msg.empty())
+ return 0;
+ return new PathDiagnosticCallEnterPiece(pos, msg);
}
else if (const CallExit *CExit = dyn_cast<CallExit>(&PP)) {
const Decl *caller = CExit->getLocationContext()->getParent()->getDecl();
@@ -765,15 +769,9 @@
if (const NamedDecl *ND = dyn_cast<NamedDecl>(caller))
Out << "Returning to '" << ND->getNameAsString() << "'";
else
- Out << "Returning to caller";
+ Out << "Returning to caller";
+ return new PathDiagnosticCallExitPiece(pos, Out.str());
}
-
- if (!pos.isValid())
- return 0;
-
- StringRef msg = Out.str();
- if (msg.empty())
- return 0;
- return new PathDiagnosticEventPiece(pos, msg);
+ return 0;
}
Modified: cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp?rev=149960&r1=149959&r2=149960&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp Mon Feb 6 20:27:37 2012
@@ -334,6 +334,8 @@
const char *Kind = 0;
switch (P.getKind()) {
+ case PathDiagnosticPiece::CallEnter:
+ case PathDiagnosticPiece::CallExit:
case PathDiagnosticPiece::Event: Kind = "Event"; break;
case PathDiagnosticPiece::ControlFlow: Kind = "Control"; break;
// Setting Kind to "Control" is intentional.
Modified: cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp?rev=149960&r1=149959&r2=149960&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp Mon Feb 6 20:27:37 2012
@@ -52,6 +52,8 @@
PathDiagnosticPiece::~PathDiagnosticPiece() {}
PathDiagnosticEventPiece::~PathDiagnosticEventPiece() {}
+PathDiagnosticCallEnterPiece::~PathDiagnosticCallEnterPiece() {}
+PathDiagnosticCallExitPiece::~PathDiagnosticCallExitPiece() {}
PathDiagnosticControlFlowPiece::~PathDiagnosticControlFlowPiece() {}
PathDiagnosticMacroPiece::~PathDiagnosticMacroPiece() {
Modified: cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp?rev=149960&r1=149959&r2=149960&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp Mon Feb 6 20:27:37 2012
@@ -275,8 +275,10 @@
ReportControlFlow(o, cast<PathDiagnosticControlFlowPiece>(P), FM, SM,
LangOpts, indent);
break;
+ case PathDiagnosticPiece::CallEnter:
+ case PathDiagnosticPiece::CallExit:
case PathDiagnosticPiece::Event:
- ReportEvent(o, cast<PathDiagnosticEventPiece>(P), FM, SM, LangOpts,
+ ReportEvent(o, cast<PathDiagnosticSpotPiece>(P), FM, SM, LangOpts,
indent);
break;
case PathDiagnosticPiece::Macro:
More information about the cfe-commits
mailing list