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 | |
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.
-rw-r--r-- | src/analysis/expression.cpp | 14 | ||||
-rw-r--r-- | src/parsers/decl/var_decl.cpp | 6 |
2 files changed, 17 insertions, 3 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) diff --git a/src/parsers/decl/var_decl.cpp b/src/parsers/decl/var_decl.cpp index e90a4e7..0264382 100644 --- a/src/parsers/decl/var_decl.cpp +++ b/src/parsers/decl/var_decl.cpp @@ -89,11 +89,11 @@ void parseVarDeclNode(VarDeclNode *node) foundNodesMap[node->gccNode] = node; } + fillDeclAttributes(node); + if (node->parseChilds <= 0) return; - fillDeclAttributes(node); - node->declSize = static_cast<IntegerCstNode*>(createParseNode( node, DECL_SIZE(node->gccNode), @@ -105,7 +105,7 @@ void parseVarDeclNode(VarDeclNode *node) node, DECL_INITIAL(node->gccNode), "initial", - 3); + 5); node->varType = static_cast<TypeNode*>(createParseNode( node, |