diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-08-18 14:44:35 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-08-18 14:44:35 +0300 |
commit | 1c20242a0668def67d0f76b5cef4d59c239bb7ae (patch) | |
tree | 5094e1fcbea08eb993c63c34fef344d2648c8983 | |
parent | 76aa2ffb6e9ef9cae6a9ffcb61655a6384ebc7d6 (diff) | |
download | paranucker-1c20242a0668def67d0f76b5cef4d59c239bb7ae.tar.gz paranucker-1c20242a0668def67d0f76b5cef4d59c239bb7ae.tar.bz2 paranucker-1c20242a0668def67d0f76b5cef4d59c239bb7ae.tar.xz paranucker-1c20242a0668def67d0f76b5cef4d59c239bb7ae.zip |
Fix false positive like this: if (ptr && ptr->func())
-rw-r--r-- | src/analysis/expression.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 509faa0..edd1615 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -428,7 +428,22 @@ void analysePointerPlusExpr(PointerPlusExprNode *node, return; VarItem var = getVariableName(node->args[0]); - reportParmDeclNullPointer(node, node->args[0], wi); + if (!var.empty()) + { + if (!var.isNonNull && + isNotIn(var.name, wi.knownNonNullVars)) + { + reportParmDeclNullPointer(node, node->args[0], wi); + } + else if (var.isNonNull) + { + addNonNullVar(wo, var.name); + } + else + { + addUnknownVar(wo, var.name); + } + } } void analyseAddrExpr(AddrExprNode *node, |