summaryrefslogtreecommitdiff
path: root/src/analysis/expression.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-10 02:28:15 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-10 02:28:15 +0300
commit50a2007d401bdb4f054fe5a2176a36dfeb40e3a0 (patch)
treea38ac52771a19a333a1b5ef2c95f56fd5efc5b13 /src/analysis/expression.cpp
parent899dca23fc159f87954b01910f52543455b6abf7 (diff)
downloadparanucker-50a2007d401bdb4f054fe5a2176a36dfeb40e3a0.tar.gz
paranucker-50a2007d401bdb4f054fe5a2176a36dfeb40e3a0.tar.bz2
paranucker-50a2007d401bdb4f054fe5a2176a36dfeb40e3a0.tar.xz
paranucker-50a2007d401bdb4f054fe5a2176a36dfeb40e3a0.zip
Add to analysis node ADDR_EXPR.
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r--src/analysis/expression.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index 81deae1..da59cd5 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/addr_expr.h"
#include "nodes/expr/indirect_ref.h"
#include "nodes/expr/modify_expr.h"
#include "nodes/expr/pointerplus_expr.h"
@@ -82,4 +83,23 @@ WalkItem analysePointerPlusExpr(PointerPlusExprNode *node, WalkItem wi)
return wi;
}
+WalkItem analyseAddrExpr(AddrExprNode *node, WalkItem wi)
+{
+ // need atleast one arg for check
+ if (node->args.empty() || command == FindArgs)
+ return wi;
+
+ Node *arg = node->args[0];
+ if (arg->nodeType == PARM_DECL)
+ {
+ if (wi.checkNullVars.find(arg->label) != wi.checkNullVars.end())
+ {
+ Log::warn(findBackLocation(node),
+ "Using variable without check for NULL");
+ }
+ }
+
+ return wi;
+}
+
}