summaryrefslogtreecommitdiff
path: root/src/analysis/expression.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-09 20:28:32 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-09 20:29:15 +0300
commit21bf666f861ffc3429459663af449a31efb25257 (patch)
tree89b117dca79d089d5ee6b3dfa64780f543e137c2 /src/analysis/expression.cpp
parent480eb8add80045d6b4fd0804f7ec35a652e4fcf0 (diff)
downloadparanucker-21bf666f861ffc3429459663af449a31efb25257.tar.gz
paranucker-21bf666f861ffc3429459663af449a31efb25257.tar.bz2
paranucker-21bf666f861ffc3429459663af449a31efb25257.tar.xz
paranucker-21bf666f861ffc3429459663af449a31efb25257.zip
Add first warning to MODIFY_EXPR node analysis.
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r--src/analysis/expression.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index 6745a42..12af495 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -25,6 +25,7 @@
#include "analysis/analysis.h"
#include "analysis/walkitem.h"
+#include "nodes/expr/indirect_ref.h"
#include "nodes/expr/modify_expr.h"
#include <set>
@@ -36,6 +37,27 @@ namespace Analysis
WalkItem analyseModifyExpr(ModifyExprNode *node, WalkItem wi)
{
+ // need atleast one arg for check
+ if (node->args.empty())
+ return wi;
+
+ Node *arg = node->args[0];
+ if (arg->nodeType == INDIRECT_REF)
+ {
+ IndirectRefNode *refNode = static_cast<IndirectRefNode*>(arg);
+ // need atleast one arg for check
+ if (refNode->args.empty())
+ return wi;
+ arg = refNode->args[0];
+ if (arg->nodeType == PARM_DECL)
+ {
+ if (wi.checkNullVars.find(arg->label) != wi.checkNullVars.end())
+ {
+ Log::warn(arg->location, "Using variable without check for NULL");
+ }
+ }
+ }
+
return wi;
}