diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-08-17 22:13:43 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-08-17 22:23:12 +0300 |
commit | 231d34905f2a24faff79f6ed805ef89f17caf96b (patch) | |
tree | 5dbcb9c4257b1086ab81035c959326b26ec0d6f0 | |
parent | 403ac1b947e323853b0dbe8b3220c320f0f5ff83 (diff) | |
download | paranucker-231d34905f2a24faff79f6ed805ef89f17caf96b.tar.gz paranucker-231d34905f2a24faff79f6ed805ef89f17caf96b.tar.bz2 paranucker-231d34905f2a24faff79f6ed805ef89f17caf96b.tar.xz paranucker-231d34905f2a24faff79f6ed805ef89f17caf96b.zip |
Fix false positives like this: var = &expr;
-rw-r--r-- | src/analysis/expression.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 7b2b897..509faa0 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -1078,12 +1078,22 @@ bool handleSetVarToFunction(const VarItem &var, if (node2 == ADDR_EXPR) { + if (node1 == VAR_DECL) + { + // var = &expr; + VarDeclNode *varDecl = static_cast<VarDeclNode*>(node1); + if (skipNop(varDecl->varType) == POINTER_TYPE) + { + addNonNullVar(wo, var.name); + return true; + } + } AddrExprNode *addr = static_cast<AddrExprNode*>(node2); if (!addr->args.empty() && skipNop(addr->args[0]) == VAR_DECL) { - VarDeclNode *varDecl = static_cast<VarDeclNode*>(skipNop(addr->args[0])); if (!var.isNonNull) { + VarDeclNode *varDecl = static_cast<VarDeclNode*>(skipNop(addr->args[0])); if (skipNop(varDecl->varType) != POINTER_TYPE) addNonNullVar(wo, var.name); else |