diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-08-05 19:55:54 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-08-05 19:55:54 +0300 |
commit | ed875a8dfb0d4dc977fb78fc25111d93bea174f2 (patch) | |
tree | 3aa3890fb01e227bb3dd4f07809a3844fc479be1 /src/analysis | |
parent | 0978bccda885caba40ca3c3b2284b772ad24492c (diff) | |
download | paranucker-ed875a8dfb0d4dc977fb78fc25111d93bea174f2.tar.gz paranucker-ed875a8dfb0d4dc977fb78fc25111d93bea174f2.tar.bz2 paranucker-ed875a8dfb0d4dc977fb78fc25111d93bea174f2.tar.xz paranucker-ed875a8dfb0d4dc977fb78fc25111d93bea174f2.zip |
Fix false positives in references. Before it counted as pointers.
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/expression.cpp | 11 |
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) { |