Fixed #1699 (False positive: The function '...' can be const)
This commit is contained in:
parent
1207531c21
commit
78614b8dc1
|
@ -177,9 +177,20 @@ CheckClass::Var *CheckClass::getVarList(const Token *tok1, bool withClasses, boo
|
||||||
else if (withClasses && (Token::Match(next, "%type% :: %type% <") ||
|
else if (withClasses && (Token::Match(next, "%type% :: %type% <") ||
|
||||||
Token::Match(next, "%type% <")))
|
Token::Match(next, "%type% <")))
|
||||||
{
|
{
|
||||||
while (next && next->str() != ">")
|
// find matching ">"
|
||||||
next = next->next();
|
int level = 0;
|
||||||
if (Token::Match(next, "> %var% ;"))
|
for (; next; next = next->next())
|
||||||
|
{
|
||||||
|
if (next->str() == "<")
|
||||||
|
level++;
|
||||||
|
else if (next->str() == ">")
|
||||||
|
{
|
||||||
|
level--;
|
||||||
|
if (level == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (next && Token::Match(next, "> %var% ;"))
|
||||||
varname = next->strAt(1);
|
varname = next->strAt(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -118,6 +118,7 @@ private:
|
||||||
TEST_CASE(const20); // ticket #1602
|
TEST_CASE(const20); // ticket #1602
|
||||||
TEST_CASE(const21); // ticket #1683
|
TEST_CASE(const21); // ticket #1683
|
||||||
TEST_CASE(const22);
|
TEST_CASE(const22);
|
||||||
|
TEST_CASE(const23); // ticket #1699
|
||||||
TEST_CASE(constoperator1); // operator< can often be const
|
TEST_CASE(constoperator1); // operator< can often be const
|
||||||
TEST_CASE(constoperator2); // operator<<
|
TEST_CASE(constoperator2); // operator<<
|
||||||
TEST_CASE(constincdec); // increment/decrement => non-const
|
TEST_CASE(constincdec); // increment/decrement => non-const
|
||||||
|
@ -3331,6 +3332,19 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void const23()
|
||||||
|
{
|
||||||
|
checkConst("class Class {\n"
|
||||||
|
"public:\n"
|
||||||
|
" typedef Template<double> Type;\n"
|
||||||
|
" typedef Template2<Type> Type2;\n"
|
||||||
|
" void set_member(Type2 m) { _m = m; }\n"
|
||||||
|
"private:\n"
|
||||||
|
" Type2 _m;\n"
|
||||||
|
"};\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
// increment/decrement => not const
|
// increment/decrement => not const
|
||||||
void constincdec()
|
void constincdec()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue