зеркало из https://github.com/microsoft/clang.git
Teach GRExprEngine to handle the initialization of the condition variable of a WhileStmt.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92106 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
76525467cf
Коммит
4c508a12ce
|
@ -751,6 +751,12 @@ void GRExprEngine::Visit(Stmt* S, ExplodedNode* Pred, ExplodedNodeSet& Dst) {
|
|||
VisitUnaryOperator(U, Pred, Dst, false);
|
||||
break;
|
||||
}
|
||||
|
||||
case Stmt::WhileStmtClass:
|
||||
// This case isn't for branch processing, but for handling the
|
||||
// initialization of a condition variable.
|
||||
VisitCondInit(cast<WhileStmt>(S)->getConditionVariable(), S, Pred, Dst);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -59,3 +59,18 @@ int test_init_in_condition_switch() {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int test_init_in_condition_while() {
|
||||
int y = 1;
|
||||
while (int x = test_init_in_condition_aux()) { // no-warning
|
||||
if (!x) {
|
||||
y = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!y) {
|
||||
int *p = 0;
|
||||
*p = 0xDEADBEEF; // no-warning
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче