зеркало из https://github.com/microsoft/clang-1.git
Improve BugReport diagnostics for loops and ? operator.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49356 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
6e9d38e2b8
Коммит
706e3cf2fa
|
@ -41,6 +41,11 @@ static inline Stmt* GetStmt(const ProgramPoint& P) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline Stmt* GetStmt(const CFGBlock* B) {
|
||||
assert (!B->empty());
|
||||
return (*B)[0];
|
||||
}
|
||||
|
||||
|
||||
PathDiagnosticPiece*
|
||||
BugDescription::getEndPath(ASTContext& Ctx, ExplodedNode<ValueState> *N) const {
|
||||
|
@ -217,10 +222,58 @@ void BugReporter::GeneratePathDiagnostic(PathDiagnostic& PD, ASTContext& Ctx,
|
|||
break;
|
||||
}
|
||||
|
||||
case Stmt::ConditionalOperatorClass: {
|
||||
|
||||
std::ostringstream os;
|
||||
os << "'?' condition evaluates to ";
|
||||
|
||||
if (*(Src->succ_begin()+1) == Dst)
|
||||
os << "false.";
|
||||
else
|
||||
os << "true.";
|
||||
|
||||
PD.push_front(new PathDiagnosticPiece(L, os.str()));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Stmt::DoStmtClass: {
|
||||
|
||||
if (*(Src->succ_begin()) == Dst) {
|
||||
|
||||
std::ostringstream os;
|
||||
|
||||
os << "Loop condition is true. Execution continues on line "
|
||||
<< SMgr.getLogicalLineNumber(GetStmt(Dst)->getLocStart()) << '.';
|
||||
|
||||
PD.push_front(new PathDiagnosticPiece(L, os.str()));
|
||||
}
|
||||
else
|
||||
PD.push_front(new PathDiagnosticPiece(L,
|
||||
"Loop condition is false. Exiting loop."));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Stmt::DoStmtClass:
|
||||
case Stmt::WhileStmtClass:
|
||||
case Stmt::ForStmtClass:
|
||||
case Stmt::ForStmtClass: {
|
||||
|
||||
if (*(Src->succ_begin()+1) == Dst) {
|
||||
|
||||
std::ostringstream os;
|
||||
|
||||
os << "Loop condition is false. Execution continues on line "
|
||||
<< SMgr.getLogicalLineNumber(GetStmt(Dst)->getLocStart()) << '.';
|
||||
|
||||
PD.push_front(new PathDiagnosticPiece(L, os.str()));
|
||||
}
|
||||
else
|
||||
PD.push_front(new PathDiagnosticPiece(L,
|
||||
"Loop condition is true. Entering loop body."));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Stmt::IfStmtClass: {
|
||||
|
||||
if (*(Src->succ_begin()+1) == Dst)
|
||||
|
|
Загрузка…
Ссылка в новой задаче