Skip to content

Commit 29001b6

Browse files
Fix #12129 FN (regression): constParameterPointer (#5605)
1 parent 67b61a0 commit 29001b6

3 files changed

Lines changed: 18 additions & 8 deletions

File tree

lib/checkother.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,14 +1613,13 @@ void CheckOther::checkConstPointer()
16131613
const int indirect = p->isArray() ? p->dimensions().size() : 1;
16141614
if (isVariableChanged(start, p->scope()->bodyEnd, indirect, p->declarationId(), false, mSettings, mTokenizer->isCPP()))
16151615
continue;
1616-
if (p->isArgument() && p->typeStartToken() && p->typeStartToken()->isSimplifiedTypedef() && !(Token::simpleMatch(p->typeEndToken(), "*") && !p->typeEndToken()->isSimplifiedTypedef()))
1617-
continue;
1618-
if (p->typeStartToken() && !p->typeStartToken()->originalName().empty())
1616+
if (p->typeStartToken() && p->typeStartToken()->isSimplifiedTypedef() && !(Token::simpleMatch(p->typeEndToken(), "*") && !p->typeEndToken()->isSimplifiedTypedef()))
16191617
continue;
16201618
constVariableError(p, p->isArgument() ? p->scope()->function : nullptr);
16211619
}
16221620
}
16231621
}
1622+
16241623
void CheckOther::constVariableError(const Variable *var, const Function *function)
16251624
{
16261625
if (!var) {

lib/tokenlist.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1926,20 +1926,24 @@ void TokenList::simplifyPlatformTypes()
19261926
Token *typeToken;
19271927
if (platformtype->mConstPtr) {
19281928
tok->str("const");
1929-
tok->insertToken("*");
1930-
tok->insertToken(platformtype->mType);
1929+
tok->isSimplifiedTypedef(true);
1930+
tok->insertToken("*")->isSimplifiedTypedef(true);
1931+
tok->insertToken(platformtype->mType)->isSimplifiedTypedef(true);
19311932
typeToken = tok;
19321933
} else if (platformtype->mPointer) {
19331934
tok->str(platformtype->mType);
1935+
tok->isSimplifiedTypedef(true);
19341936
typeToken = tok;
1935-
tok->insertToken("*");
1937+
tok->insertToken("*")->isSimplifiedTypedef(true);
19361938
} else if (platformtype->mPtrPtr) {
19371939
tok->str(platformtype->mType);
1940+
tok->isSimplifiedTypedef(true);
19381941
typeToken = tok;
1939-
tok->insertToken("*");
1940-
tok->insertToken("*");
1942+
tok->insertToken("*")->isSimplifiedTypedef(true);
1943+
tok->insertToken("*")->isSimplifiedTypedef(true);
19411944
} else {
19421945
tok->str(platformtype->mType);
1946+
tok->isSimplifiedTypedef(true);
19431947
typeToken = tok;
19441948
}
19451949
if (platformtype->mSigned)

test/testother.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3837,6 +3837,13 @@ class TestOther : public TestFixture {
38373837
" qsort(p, nmemb, size, cmp);\n"
38383838
"}\n");
38393839
ASSERT_EQUALS("", errout.str());
3840+
3841+
check("void g(bool *r, std::size_t *b) {\n" // #12129
3842+
" if (*r && *b >= 5) {}\n"
3843+
"}\n");
3844+
ASSERT_EQUALS("[test.cpp:1]: (style) Parameter 'r' can be declared as pointer to const\n"
3845+
"[test.cpp:1]: (style) Parameter 'b' can be declared as pointer to const\n",
3846+
errout.str());
38403847
}
38413848

38423849
void switchRedundantAssignmentTest() {

0 commit comments

Comments
 (0)