summaryrefslogtreecommitdiff
path: root/src/analysis/expression.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-24 16:48:35 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-24 16:48:35 +0300
commit5872f7799cc09b33dc1f0101114cad2cdb1784b7 (patch)
treeeea951740e7f90ad5dce02c00bd52dc7c11d070e /src/analysis/expression.cpp
parentb91ccde7842f56971dc388a56896b334559548cc (diff)
downloadparanucker-5872f7799cc09b33dc1f0101114cad2cdb1784b7.tar.gz
paranucker-5872f7799cc09b33dc1f0101114cad2cdb1784b7.tar.bz2
paranucker-5872f7799cc09b33dc1f0101114cad2cdb1784b7.tar.xz
paranucker-5872f7799cc09b33dc1f0101114cad2cdb1784b7.zip
Fix false positive report for first pointer argument for function (not method).
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r--src/analysis/expression.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index 54cf738..13911de 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -43,6 +43,7 @@
#include "nodes/expr/truthor_expr.h"
#include "nodes/expr/truthorif_expr.h"
+#include "nodes/decl/function_decl.h"
#include "nodes/decl/var_decl.h"
#include "nodes/ref/indirect_ref.h"
@@ -407,9 +408,15 @@ void analyseCallExpr(CallExprNode *node, const WalkItem &wi, WalkItem &wo)
AddrExprNode *addrNode = static_cast<AddrExprNode*>(node->function);
if (!addrNode->args.empty())
{
- if (addrNode->args[0]->nodeType == FUNCTION_TYPE)
+ if (addrNode->args[0]->nodeType == FUNCTION_DECL)
{
- enableCheck = false;
+ FunctionDeclNode *declNode = static_cast<FunctionDeclNode*>(
+ addrNode->args[0]);
+ if (declNode->functionType &&
+ declNode->functionType->nodeType == FUNCTION_TYPE)
+ {
+ enableCheck = false;
+ }
}
}
}