* Partial fix for #11637 FN functionConst * Redundant check
This commit is contained in:
parent
0ecf101fe3
commit
a91222fad8
|
@ -2391,7 +2391,7 @@ bool CheckClass::checkConstFunc(const Scope *scope, const Function *func, bool&
|
||||||
if (lhs->str() == "&") {
|
if (lhs->str() == "&") {
|
||||||
const Token* const top = lhs->astTop();
|
const Token* const top = lhs->astTop();
|
||||||
if (top->isAssignmentOp()) {
|
if (top->isAssignmentOp()) {
|
||||||
if (Token::simpleMatch(top->astOperand2(), "{")) // TODO: check usage in init list
|
if (Token::simpleMatch(top->astOperand2(), "{") && !top->astOperand2()->previous()->function()) // TODO: check usage in init list
|
||||||
return false;
|
return false;
|
||||||
else if (top->previous()->variable()) {
|
else if (top->previous()->variable()) {
|
||||||
if (top->previous()->variable()->typeStartToken()->strAt(-1) != "const" && top->previous()->variable()->isPointer())
|
if (top->previous()->variable()->typeStartToken()->strAt(-1) != "const" && top->previous()->variable()->isPointer())
|
||||||
|
|
|
@ -1102,7 +1102,7 @@ void SymbolDatabase::createSymbolDatabaseSetFunctionPointers(bool firstPass)
|
||||||
|
|
||||||
// Set function call pointers
|
// Set function call pointers
|
||||||
for (const Token* tok = mTokenizer.list.front(); tok != mTokenizer.list.back(); tok = tok->next()) {
|
for (const Token* tok = mTokenizer.list.front(); tok != mTokenizer.list.back(); tok = tok->next()) {
|
||||||
if (tok->isName() && !tok->function() && tok->varId() == 0 && Token::Match(tok, "%name% [(,)>;]") && !isReservedName(tok->str())) {
|
if (tok->isName() && !tok->function() && tok->varId() == 0 && Token::Match(tok, "%name% [{(,)>;]") && !isReservedName(tok->str())) {
|
||||||
if (tok->next()->str() == ">" && !tok->next()->link())
|
if (tok->next()->str() == ">" && !tok->next()->link())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -179,6 +179,7 @@ private:
|
||||||
TEST_CASE(const87);
|
TEST_CASE(const87);
|
||||||
TEST_CASE(const88);
|
TEST_CASE(const88);
|
||||||
TEST_CASE(const89);
|
TEST_CASE(const89);
|
||||||
|
TEST_CASE(const90);
|
||||||
|
|
||||||
TEST_CASE(const_handleDefaultParameters);
|
TEST_CASE(const_handleDefaultParameters);
|
||||||
TEST_CASE(const_passThisToMemberOfOtherClass);
|
TEST_CASE(const_passThisToMemberOfOtherClass);
|
||||||
|
@ -6540,6 +6541,22 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void const90() { // #11637
|
||||||
|
checkConst("class S {};\n"
|
||||||
|
"struct C {\n"
|
||||||
|
" C(const S*);\n"
|
||||||
|
" C(const S&);\n"
|
||||||
|
"};\n"
|
||||||
|
"class T {\n"
|
||||||
|
" S s;\n"
|
||||||
|
" void f1() { C c = C{ &s }; }\n"
|
||||||
|
" void f2() { C c = C{ s }; }\n"
|
||||||
|
"};\n");
|
||||||
|
ASSERT_EQUALS("[test.cpp:8]: (style, inconclusive) Technically the member function 'T::f1' can be const.\n"
|
||||||
|
"[test.cpp:9]: (style, inconclusive) Technically the member function 'T::f2' can be const.\n",
|
||||||
|
errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void const_handleDefaultParameters() {
|
void const_handleDefaultParameters() {
|
||||||
checkConst("struct Foo {\n"
|
checkConst("struct Foo {\n"
|
||||||
" void foo1(int i, int j = 0) {\n"
|
" void foo1(int i, int j = 0) {\n"
|
||||||
|
|
Loading…
Reference in New Issue