From: Ted Kremenek Date: Thu, 24 Dec 2009 00:54:56 +0000 (+0000) Subject: Teach GRExprEngine to handle the initialization of the condition variable of a WhileStmt. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4c508a12cedcf2896412a3700c1b2a35bf339828;p=clang 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 --- diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp index d7486f8513..06621af19e 100644 --- a/lib/Analysis/GRExprEngine.cpp +++ b/lib/Analysis/GRExprEngine.cpp @@ -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(S)->getConditionVariable(), S, Pred, Dst); + break; } } diff --git a/test/Analysis/misc-ps-region-store.cpp b/test/Analysis/misc-ps-region-store.cpp index e9d6d93871..fcef0516ec 100644 --- a/test/Analysis/misc-ps-region-store.cpp +++ b/test/Analysis/misc-ps-region-store.cpp @@ -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; +}