diff --git a/lib/checkother.cpp b/lib/checkother.cpp index 418c9f06bc2..c358415f12b 100644 --- a/lib/checkother.cpp +++ b/lib/checkother.cpp @@ -1703,14 +1703,13 @@ void CheckOther::checkConstPointer() const int indirect = p->isArray() ? p->dimensions().size() : 1; if (isVariableChanged(start, p->scope()->bodyEnd, indirect, p->declarationId(), false, mSettings, mTokenizer->isCPP())) continue; - if (p->isArgument() && p->typeStartToken() && p->typeStartToken()->isSimplifiedTypedef() && !(Token::simpleMatch(p->typeEndToken(), "*") && !p->typeEndToken()->isSimplifiedTypedef())) - continue; - if (p->typeStartToken() && !p->typeStartToken()->originalName().empty()) + if (p->typeStartToken() && p->typeStartToken()->isSimplifiedTypedef() && !(Token::simpleMatch(p->typeEndToken(), "*") && !p->typeEndToken()->isSimplifiedTypedef())) continue; constVariableError(p, p->isArgument() ? p->scope()->function : nullptr); } } } + void CheckOther::constVariableError(const Variable *var, const Function *function) { if (!var) { diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 0b892cc98e1..96db342b3e1 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -1918,20 +1918,24 @@ void TokenList::simplifyPlatformTypes() Token *typeToken; if (platformtype->mConstPtr) { tok->str("const"); - tok->insertToken("*"); - tok->insertToken(platformtype->mType); + tok->isSimplifiedTypedef(true); + tok->insertToken("*")->isSimplifiedTypedef(true); + tok->insertToken(platformtype->mType)->isSimplifiedTypedef(true); typeToken = tok; } else if (platformtype->mPointer) { tok->str(platformtype->mType); + tok->isSimplifiedTypedef(true); typeToken = tok; - tok->insertToken("*"); + tok->insertToken("*")->isSimplifiedTypedef(true); } else if (platformtype->mPtrPtr) { tok->str(platformtype->mType); + tok->isSimplifiedTypedef(true); typeToken = tok; - tok->insertToken("*"); - tok->insertToken("*"); + tok->insertToken("*")->isSimplifiedTypedef(true); + tok->insertToken("*")->isSimplifiedTypedef(true); } else { tok->str(platformtype->mType); + tok->isSimplifiedTypedef(true); typeToken = tok; } if (platformtype->mSigned) diff --git a/test/testother.cpp b/test/testother.cpp index 4440cf51781..74f319e09d6 100644 --- a/test/testother.cpp +++ b/test/testother.cpp @@ -3828,6 +3828,13 @@ class TestOther : public TestFixture { " qsort(p, nmemb, size, cmp);\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + check("void g(bool *r, std::size_t *b) {\n" // #12129 + " if (*r && *b >= 5) {}\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:1]: (style) Parameter 'r' can be declared as pointer to const\n" + "[test.cpp:1]: (style) Parameter 'b' can be declared as pointer to const\n", + errout.str()); } void switchRedundantAssignmentTest() {