diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-10 02:28:15 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-10 02:28:15 +0300 |
commit | 50a2007d401bdb4f054fe5a2176a36dfeb40e3a0 (patch) | |
tree | a38ac52771a19a333a1b5ef2c95f56fd5efc5b13 /src/analysis/expression.cpp | |
parent | 899dca23fc159f87954b01910f52543455b6abf7 (diff) | |
download | paranucker-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.cpp | 20 |
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; +} + } |