parent
1d677c57a8
commit
69834d537b
|
@ -1195,7 +1195,7 @@ void CheckUnusedVar::checkFunctionVariableUsage()
|
|||
if (isIncrementOrDecrement && tok->astParent() && precedes(tok, tok->astOperand1()))
|
||||
continue;
|
||||
|
||||
if (tok->str() == "=" && isRaiiClass(tok->valueType(), mTokenizer->isCPP(), false))
|
||||
if (tok->str() == "=" && !(tok->valueType() && tok->valueType()->pointer) && isRaiiClass(tok->valueType(), mTokenizer->isCPP(), false))
|
||||
continue;
|
||||
|
||||
const bool isPointer = tok->valueType() && tok->valueType()->pointer;
|
||||
|
|
|
@ -381,7 +381,6 @@ static void fillProgramMemoryFromAssignments(ProgramMemory& pm, const Token* tok
|
|||
++indentlevel;
|
||||
continue;
|
||||
}
|
||||
tok2 = cond->astParent()->previous();
|
||||
} else if (conditionIsTrue(cond, state)) {
|
||||
if (inElse)
|
||||
tok2 = tok2->link()->tokAt(-2);
|
||||
|
|
|
@ -144,7 +144,7 @@ private:
|
|||
const Token * const tok = (offset < 0)
|
||||
? tokenizer.list.back()->tokAt(1+offset)
|
||||
: tokenizer.tokens()->tokAt(offset);
|
||||
return (::isReturnScope)(tok);
|
||||
return (isReturnScope)(tok);
|
||||
}
|
||||
|
||||
void isReturnScopeTest() {
|
||||
|
@ -176,7 +176,7 @@ private:
|
|||
tokenizer.simplifyTokens1("");
|
||||
const Token * const tok1 = Token::findsimplematch(tokenizer.tokens(), tokStr1, strlen(tokStr1));
|
||||
const Token * const tok2 = Token::findsimplematch(tok1->next(), tokStr2, strlen(tokStr2));
|
||||
return (::isSameExpression)(false, false, tok1, tok2, library, false, true, nullptr);
|
||||
return (isSameExpression)(false, false, tok1, tok2, library, false, true, nullptr);
|
||||
}
|
||||
|
||||
void isSameExpressionTest() {
|
||||
|
@ -214,7 +214,7 @@ private:
|
|||
ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line);
|
||||
const Token * const tok1 = Token::findsimplematch(tokenizer.tokens(), startPattern, strlen(startPattern));
|
||||
const Token * const tok2 = Token::findsimplematch(tokenizer.tokens(), endPattern, strlen(endPattern));
|
||||
return (::isVariableChanged)(tok1, tok2, 1, false, &settings, true);
|
||||
return (isVariableChanged)(tok1, tok2, 1, false, &settings, true);
|
||||
}
|
||||
|
||||
void isVariableChangedTest() {
|
||||
|
@ -236,7 +236,7 @@ private:
|
|||
std::istringstream istr(code);
|
||||
ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line);
|
||||
const Token * const argtok = Token::findmatch(tokenizer.tokens(), pattern);
|
||||
return (::isVariableChangedByFunctionCall)(argtok, 0, &settings, inconclusive);
|
||||
return (isVariableChangedByFunctionCall)(argtok, 0, &settings, inconclusive);
|
||||
}
|
||||
|
||||
void isVariableChangedByFunctionCallTest() {
|
||||
|
|
|
@ -1281,8 +1281,7 @@ private:
|
|||
const Token *tok = Token::findsimplematch(tokenizer.tokens(), "sizeof (");
|
||||
ASSERT(!!tok);
|
||||
tok = tok->next();
|
||||
// TODO ASSERT(tok->hasKnownIntValue());
|
||||
// TODO ASSERT_EQUALS(10, tok->getKnownIntValue());
|
||||
TODO_ASSERT_EQUALS(true, false, tok->hasKnownIntValue() && tok->getKnownIntValue() == 10);
|
||||
}
|
||||
|
||||
void valueType1() {
|
||||
|
|
|
@ -131,6 +131,7 @@ private:
|
|||
TEST_CASE(localvar61); // #9407
|
||||
TEST_CASE(localvar62); // #10824
|
||||
TEST_CASE(localvar63); // #6928
|
||||
TEST_CASE(localvar64); // #9997
|
||||
TEST_CASE(localvarloops); // loops
|
||||
TEST_CASE(localvaralias1);
|
||||
TEST_CASE(localvaralias2); // ticket #1637
|
||||
|
@ -3485,6 +3486,28 @@ private:
|
|||
ASSERT_EQUALS("[test.cpp:2]: (style) Variable 'x' is assigned a value that is never used.\n", errout.str());
|
||||
}
|
||||
|
||||
void localvar64() { // #9997
|
||||
functionVariableUsage("class S {\n"
|
||||
" ~S();\n"
|
||||
" S* f();\n"
|
||||
" S* g(int);\n"
|
||||
"};\n"
|
||||
"void h(S* s, bool b) {\n"
|
||||
" S* p = nullptr;\n"
|
||||
" S* q = nullptr;\n"
|
||||
" if (b) {\n"
|
||||
" p = s;\n"
|
||||
" q = s->f()->g(-2);\n"
|
||||
" }\n"
|
||||
" else\n"
|
||||
" q = s;\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("[test.cpp:10]: (style) Variable 'p' is assigned a value that is never used.\n"
|
||||
"[test.cpp:11]: (style) Variable 'q' is assigned a value that is never used.\n"
|
||||
"[test.cpp:14]: (style) Variable 'q' is assigned a value that is never used.\n",
|
||||
errout.str());
|
||||
}
|
||||
|
||||
void localvarloops() {
|
||||
// loops
|
||||
functionVariableUsage("void fun(int c) {\n"
|
||||
|
|
Loading…
Reference in New Issue