diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-07-22 01:18:46 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-07-22 01:18:46 +0300 |
commit | f37f81b85b2060b5d220db3915f2208aabc4eab1 (patch) | |
tree | a39382b9c693ece569d604ec796b0c2a174d88f9 /src/analysis/expression.cpp | |
parent | c683570f319675a503845cc3596ac4a5d996eeee (diff) | |
download | paranucker-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.cpp | 14 |
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) |