mirror of
https://github.com/intel/llvm.git
synced 2026-01-27 06:06:34 +08:00
[analyzer] Print return values from debug.DumpCalls checker.
Debug utility only, no functionality change. llvm-svn: 177649
This commit is contained in:
@@ -61,9 +61,11 @@ void ento::registerTraversalDumper(CheckerManager &mgr) {
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace {
|
||||
class CallDumper : public Checker< check::PreCall > {
|
||||
class CallDumper : public Checker< check::PreCall,
|
||||
check::PostCall > {
|
||||
public:
|
||||
void checkPreCall(const CallEvent &Call, CheckerContext &C) const;
|
||||
void checkPostCall(const CallEvent &Call, CheckerContext &C) const;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -80,6 +82,26 @@ void CallDumper::checkPreCall(const CallEvent &Call, CheckerContext &C) const {
|
||||
Call.dump(llvm::outs());
|
||||
}
|
||||
|
||||
void CallDumper::checkPostCall(const CallEvent &Call, CheckerContext &C) const {
|
||||
const Expr *CallE = Call.getOriginExpr();
|
||||
if (!CallE)
|
||||
return;
|
||||
|
||||
unsigned Indentation = 0;
|
||||
for (const LocationContext *LC = C.getLocationContext()->getParent();
|
||||
LC != 0; LC = LC->getParent())
|
||||
++Indentation;
|
||||
|
||||
// It is mildly evil to print directly to llvm::outs() rather than emitting
|
||||
// warnings, but this ensures things do not get filtered out by the rest of
|
||||
// the static analyzer machinery.
|
||||
llvm::outs().indent(Indentation);
|
||||
if (Call.getResultType()->isVoidType())
|
||||
llvm::outs() << "Returning void\n";
|
||||
else
|
||||
llvm::outs() << "Returning " << C.getSVal(CallE) << "\n";
|
||||
}
|
||||
|
||||
void ento::registerCallDumper(CheckerManager &mgr) {
|
||||
mgr.registerChecker<CallDumper>();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user