Fixed #2480 (false positive on unused private function)
This commit is contained in:
parent
856a631f35
commit
94aafa482c
|
@ -734,8 +734,11 @@ void CheckClass::privateFunctions()
|
||||||
// or if the function address is used somewhere...
|
// or if the function address is used somewhere...
|
||||||
// eg. sigc::mem_fun(this, &className::classFunction)
|
// eg. sigc::mem_fun(this, &className::classFunction)
|
||||||
const std::string _pattern2("& " + classname + " :: " + FuncList.front()->str());
|
const std::string _pattern2("& " + classname + " :: " + FuncList.front()->str());
|
||||||
|
const std::string methodAsArgument("(|, " + classname + " :: " + FuncList.front()->str() + " ,|)");
|
||||||
if (!Token::findmatch(_tokenizer->tokens(), _pattern.c_str()) &&
|
if (!Token::findmatch(_tokenizer->tokens(), _pattern.c_str()) &&
|
||||||
!Token::findmatch(_tokenizer->tokens(), _pattern2.c_str()))
|
!Token::findmatch(_tokenizer->tokens(), _pattern2.c_str()) &&
|
||||||
|
!Token::findmatch(_tokenizer->tokens(), methodAsArgument.c_str())
|
||||||
|
)
|
||||||
{
|
{
|
||||||
unusedPrivateFunctionError(FuncList.front(), classname, FuncList.front()->str());
|
unusedPrivateFunctionError(FuncList.front(), classname, FuncList.front()->str());
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,9 @@ private:
|
||||||
|
|
||||||
// #2407 - FP when called from operator()
|
// #2407 - FP when called from operator()
|
||||||
TEST_CASE(fp_operator);
|
TEST_CASE(fp_operator);
|
||||||
TEST_CASE(testDoesNotIdentifyCallback); // #2480
|
TEST_CASE(testDoesNotIdentifyMethodAsFirstFunctionArgument); // #2480
|
||||||
|
TEST_CASE(testDoesNotIdentifyMethodAsMiddleFunctionArgument);
|
||||||
|
TEST_CASE(testDoesNotIdentifyMethodAsLastFunctionArgument);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -449,7 +451,7 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void testDoesNotIdentifyCallback()
|
void testDoesNotIdentifyMethodAsFirstFunctionArgument()
|
||||||
{
|
{
|
||||||
check("#include <iostream>"
|
check("#include <iostream>"
|
||||||
"void callback(void (*func)(int), int arg)"
|
"void callback(void (*func)(int), int arg)"
|
||||||
|
@ -474,8 +476,66 @@ private:
|
||||||
"{"
|
"{"
|
||||||
" MountOperation aExample(10);"
|
" MountOperation aExample(10);"
|
||||||
"}"
|
"}"
|
||||||
);
|
);
|
||||||
TODO_ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void testDoesNotIdentifyMethodAsMiddleFunctionArgument()
|
||||||
|
{
|
||||||
|
check("#include <iostream>"
|
||||||
|
"void callback(char, void (*func)(int), int arg)"
|
||||||
|
"{"
|
||||||
|
" (*func)(arg);"
|
||||||
|
"}"
|
||||||
|
"class MountOperation"
|
||||||
|
"{"
|
||||||
|
" static void Completed(int i);"
|
||||||
|
"public:"
|
||||||
|
" MountOperation(int i);"
|
||||||
|
"};"
|
||||||
|
"void MountOperation::Completed(int i)"
|
||||||
|
"{"
|
||||||
|
" std::cerr << i << std::endl;"
|
||||||
|
"}"
|
||||||
|
"MountOperation::MountOperation(int i)"
|
||||||
|
"{"
|
||||||
|
" callback('a', MountOperation::Completed, i);"
|
||||||
|
"}"
|
||||||
|
"int main(void)"
|
||||||
|
"{"
|
||||||
|
" MountOperation aExample(10);"
|
||||||
|
"}"
|
||||||
|
);
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void testDoesNotIdentifyMethodAsLastFunctionArgument()
|
||||||
|
{
|
||||||
|
check("#include <iostream>"
|
||||||
|
"void callback(int arg, void (*func)(int))"
|
||||||
|
"{"
|
||||||
|
" (*func)(arg);"
|
||||||
|
"}"
|
||||||
|
"class MountOperation"
|
||||||
|
"{"
|
||||||
|
" static void Completed(int i);"
|
||||||
|
"public:"
|
||||||
|
" MountOperation(int i);"
|
||||||
|
"};"
|
||||||
|
"void MountOperation::Completed(int i)"
|
||||||
|
"{"
|
||||||
|
" std::cerr << i << std::endl;"
|
||||||
|
"}"
|
||||||
|
"MountOperation::MountOperation(int i)"
|
||||||
|
"{"
|
||||||
|
" callback(i, MountOperation::Completed);"
|
||||||
|
"}"
|
||||||
|
"int main(void)"
|
||||||
|
"{"
|
||||||
|
" MountOperation aExample(10);"
|
||||||
|
"}"
|
||||||
|
);
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue