From f37f81b85b2060b5d220db3915f2208aabc4eab1 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 22 Jul 2015 01:18:46 +0300 Subject: Allow detect as non null if to pointer assigned address from some var. --- src/analysis/expression.cpp | 14 ++++++++++++++ src/parsers/decl/var_decl.cpp | 6 +++--- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'src') 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(node2); + if (!addr->args.empty() && addr->args[0] == VAR_DECL) + { + VarDeclNode *varDecl = static_cast(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(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(createParseNode( node, -- cgit v1.2.3-60-g2f50