зеркало из https://github.com/microsoft/clang-1.git
[analyzer] Add a debug dump for PathPieces, a list of PathDiagnosticPieces.
Originally implemented by Ted, extended by me. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182186 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
bb518991ce
Коммит
d1913d89e2
|
@ -415,6 +415,8 @@ public:
|
|||
flattenTo(Result, Result, ShouldFlattenMacros);
|
||||
return Result;
|
||||
}
|
||||
|
||||
LLVM_ATTRIBUTE_USED void dump() const;
|
||||
};
|
||||
|
||||
class PathDiagnosticSpotPiece : public PathDiagnosticPiece {
|
||||
|
|
|
@ -1873,6 +1873,60 @@ static bool isIncrementOrInitInForLoop(const Stmt *S, const Stmt *FL) {
|
|||
typedef llvm::DenseSet<const PathDiagnosticCallPiece *>
|
||||
OptimizedCallsSet;
|
||||
|
||||
void PathPieces::dump() const {
|
||||
unsigned index = 0;
|
||||
for (PathPieces::const_iterator I = begin(), E = end(); I != E; ++I ) {
|
||||
llvm::errs() << "[" << index++ << "]";
|
||||
|
||||
switch ((*I)->getKind()) {
|
||||
case PathDiagnosticPiece::Call:
|
||||
llvm::errs() << " CALL\n--------------\n";
|
||||
|
||||
if (const Stmt *SLoc = getLocStmt((*I)->getLocation())) {
|
||||
SLoc->dump();
|
||||
} else {
|
||||
const PathDiagnosticCallPiece *Call = cast<PathDiagnosticCallPiece>(*I);
|
||||
if (const NamedDecl *ND = dyn_cast<NamedDecl>(Call->getCallee()))
|
||||
llvm::errs() << *ND << "\n";
|
||||
}
|
||||
break;
|
||||
case PathDiagnosticPiece::Event:
|
||||
llvm::errs() << " EVENT\n--------------\n";
|
||||
llvm::errs() << (*I)->getString() << "\n";
|
||||
if (const Stmt *SLoc = getLocStmt((*I)->getLocation())) {
|
||||
llvm::errs() << " ---- at ----\n";
|
||||
SLoc->dump();
|
||||
}
|
||||
break;
|
||||
case PathDiagnosticPiece::Macro:
|
||||
llvm::errs() << " MACRO\n--------------\n";
|
||||
// FIXME: print which macro is being invoked.
|
||||
break;
|
||||
case PathDiagnosticPiece::ControlFlow: {
|
||||
const PathDiagnosticControlFlowPiece *CP =
|
||||
cast<PathDiagnosticControlFlowPiece>(*I);
|
||||
llvm::errs() << " CONTROL\n--------------\n";
|
||||
|
||||
if (const Stmt *s1Start = getLocStmt(CP->getStartLocation()))
|
||||
s1Start->dump();
|
||||
else
|
||||
llvm::errs() << "NULL\n";
|
||||
|
||||
llvm::errs() << " ---- to ----\n";
|
||||
|
||||
if (const Stmt *s1End = getLocStmt(CP->getEndLocation()))
|
||||
s1End->dump();
|
||||
else
|
||||
llvm::errs() << "NULL\n";
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
llvm::errs() << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
static bool optimizeEdges(PathPieces &path, SourceManager &SM,
|
||||
OptimizedCallsSet &OCS,
|
||||
LocationContextMap &LCM) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче