summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-08-05 19:55:54 +0300
committerAndrei Karas <akaras@inbox.ru>2015-08-05 19:55:54 +0300
commited875a8dfb0d4dc977fb78fc25111d93bea174f2 (patch)
tree3aa3890fb01e227bb3dd4f07809a3844fc479be1
parent0978bccda885caba40ca3c3b2284b772ad24492c (diff)
downloadparanucker-ed875a8dfb0d4dc977fb78fc25111d93bea174f2.tar.gz
paranucker-ed875a8dfb0d4dc977fb78fc25111d93bea174f2.tar.bz2
paranucker-ed875a8dfb0d4dc977fb78fc25111d93bea174f2.tar.xz
paranucker-ed875a8dfb0d4dc977fb78fc25111d93bea174f2.zip
Fix false positives in references. Before it counted as pointers.
-rw-r--r--src/analysis/expression.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index b7af406..70e25a3 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -289,6 +289,15 @@ std::vector<VarItem> getComponentRefLeftParts(Node *node)
Node *ref = skipNop(indirect->ref);
if (ref && !isValidVar(ref->label))
return str;
+ if (ref == PARM_DECL)
+ {
+ ParmDeclNode *parmDecl = static_cast<ParmDeclNode*>(ref);
+ if (skipNop(parmDecl->declType) != nullptr &&
+ skipNop(parmDecl->declType) != POINTER_TYPE)
+ {
+ return str;
+ }
+ }
if (ref == VAR_DECL)
{
VarDeclNode *varDecl = static_cast<VarDeclNode*>(ref);
@@ -298,6 +307,8 @@ std::vector<VarItem> getComponentRefLeftParts(Node *node)
{
isNonNull = true;
}
+ if (varDecl->varType != POINTER_TYPE)
+ return str;
}
if (ref == PARM_DECL || ref == VAR_DECL)
{