summaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/analysis/expression.cpp14
-rw-r--r--src/parsers/decl/var_decl.cpp6
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,