Fixed #5701 (FP for std::unordered_map::operator[]; there is no const version)
This commit is contained in:
parent
52e0e4453b
commit
6f3e3f5e2e
|
@ -1783,8 +1783,12 @@ bool CheckClass::checkConstFunc(const Scope *scope, const Function *func, bool&
|
||||||
} else if (end->strAt(1) == "[") {
|
} else if (end->strAt(1) == "[") {
|
||||||
if (end->varId()) {
|
if (end->varId()) {
|
||||||
const Variable *var = end->variable();
|
const Variable *var = end->variable();
|
||||||
|
// The container contains the STL types whose operator[] is not a const.
|
||||||
if (var && Token::simpleMatch(var->typeStartToken(), "std :: map")) // operator[] changes a map
|
// THIS ARRAY MUST BE ORDERED ALPHABETICALLY
|
||||||
|
static const char* const stl_containers [] = {
|
||||||
|
"map", "unordered_map"
|
||||||
|
};
|
||||||
|
if (var && var->isStlType(stl_containers))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!jumpBackToken)
|
if (!jumpBackToken)
|
||||||
|
|
|
@ -147,6 +147,7 @@ private:
|
||||||
TEST_CASE(const59); // ticket #4646
|
TEST_CASE(const59); // ticket #4646
|
||||||
TEST_CASE(const60); // ticket #3322
|
TEST_CASE(const60); // ticket #3322
|
||||||
TEST_CASE(const61); // ticket #5606
|
TEST_CASE(const61); // ticket #5606
|
||||||
|
TEST_CASE(const62); // ticket #5701
|
||||||
TEST_CASE(const_handleDefaultParameters);
|
TEST_CASE(const_handleDefaultParameters);
|
||||||
TEST_CASE(const_passThisToMemberOfOtherClass);
|
TEST_CASE(const_passThisToMemberOfOtherClass);
|
||||||
TEST_CASE(assigningPointerToPointerIsNotAConstOperation);
|
TEST_CASE(assigningPointerToPointerIsNotAConstOperation);
|
||||||
|
@ -4828,6 +4829,19 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void const62() {
|
||||||
|
checkConst("class A {\n"
|
||||||
|
" private:\n"
|
||||||
|
" std::unordered_map<unsigned int,unsigned int> _hash;\n"
|
||||||
|
" public:\n"
|
||||||
|
" A() : _hash() {}\n"
|
||||||
|
" unsigned int fetch(unsigned int key)\n" // cannot be 'const'
|
||||||
|
" {\n"
|
||||||
|
" return _hash[key];\n"
|
||||||
|
" }\n"
|
||||||
|
"};");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void const_handleDefaultParameters() {
|
void const_handleDefaultParameters() {
|
||||||
checkConst("struct Foo {\n"
|
checkConst("struct Foo {\n"
|
||||||
|
|
Loading…
Reference in New Issue