summaryrefslogtreecommitdiff
path: root/src/analysis
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-07-10 01:16:03 +0300
committerAndrei Karas <akaras@inbox.ru>2015-07-10 01:22:26 +0300
commit41a188424ec40c7900de1ff28d792753d5a16e85 (patch)
tree4025f12fbccf2f5443e3736c01411f01caf7b2fc /src/analysis
parent1ae0ec902a7d242c9f6a5cf365190c1592134d53 (diff)
downloadparanucker-41a188424ec40c7900de1ff28d792753d5a16e85.tar.gz
paranucker-41a188424ec40c7900de1ff28d792753d5a16e85.tar.bz2
paranucker-41a188424ec40c7900de1ff28d792753d5a16e85.tar.xz
paranucker-41a188424ec40c7900de1ff28d792753d5a16e85.zip
In WHILE_STMT also check condition after while body.
This allow detect issue like this: if (!ptr) return; while (ptr->num) { ... ptr = someothervalue; }
Diffstat (limited to 'src/analysis')
-rw-r--r--src/analysis/statement.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/analysis/statement.cpp b/src/analysis/statement.cpp
index 1d64ac3..a9bfef4 100644
--- a/src/analysis/statement.cpp
+++ b/src/analysis/statement.cpp
@@ -232,6 +232,11 @@ void analyseWhileStmt(WhileStmtNode *node, const WalkItem &wi, WalkItem &wo)
else if (bodyNode)
{
addNeedCheckNullVars2(wo2, wo);
+
+ wci = wo;
+ wco = wo;
+ walkTree(condNode, wci, wco);
+ Log::dumpWI(node, "wco2 ", wco);
}
wo.isReturned = false;