summaryrefslogtreecommitdiff
path: root/src/analysis/expression.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-07-22 01:18:46 +0300
committerAndrei Karas <akaras@inbox.ru>2015-07-22 01:18:46 +0300
commitf37f81b85b2060b5d220db3915f2208aabc4eab1 (patch)
treea39382b9c693ece569d604ec796b0c2a174d88f9 /src/analysis/expression.cpp
parentc683570f319675a503845cc3596ac4a5d996eeee (diff)
downloadparanucker-f37f81b85b2060b5d220db3915f2208aabc4eab1.tar.gz
paranucker-f37f81b85b2060b5d220db3915f2208aabc4eab1.tar.bz2
paranucker-f37f81b85b2060b5d220db3915f2208aabc4eab1.tar.xz
paranucker-f37f81b85b2060b5d220db3915f2208aabc4eab1.zip
Allow detect as non null if to pointer assigned address from some var.
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r--src/analysis/expression.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index 50ebf74..e6aa4fa 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -783,6 +783,20 @@ bool handleSetVarToFunction(const std::string &var,
return true;
}
+ if (node2 == ADDR_EXPR)
+ {
+ AddrExprNode *addr = static_cast<AddrExprNode*>(node2);
+ if (!addr->args.empty() && addr->args[0] == VAR_DECL)
+ {
+ VarDeclNode *varDecl = static_cast<VarDeclNode*>(addr->args[0]);
+ if (varDecl->varType != POINTER_TYPE)
+ {
+ addNonNullVar(wo, var);
+ return true;
+ }
+ }
+ }
+
if (node2 != CALL_EXPR)
{
if (node2 != COMPOUND_EXPR)