Skip to content

Commit d64dadc

Browse files
Fix #10758 Crash in CheckClass::checkConstFunc() (danmar#3740)
1 parent 8179226 commit d64dadc

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

lib/checkclass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2169,7 +2169,7 @@ bool CheckClass::checkConstFunc(const Scope *scope, const Function *func, bool&
21692169
if (var && var->isStlType(stl_containers_not_const))
21702170
return false;
21712171
const Token* assignTok = end->next()->astParent();
2172-
if (assignTok && assignTok->isAssignmentOp() && assignTok->astOperand1() && assignTok->astOperand1()->variable()) {
2172+
if (var && assignTok && assignTok->isAssignmentOp() && assignTok->astOperand1() && assignTok->astOperand1()->variable()) {
21732173
const Variable* assignVar = assignTok->astOperand1()->variable();
21742174
if (assignVar->isPointer() && !assignVar->isConst() && var->typeScope()) {
21752175
const auto& funcMap = var->typeScope()->functionMap;

test/testclass.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5900,6 +5900,15 @@ class TestClass : public TestFixture {
59005900
" }\n"
59015901
"};\n");
59025902
ASSERT_EQUALS("", errout.str());
5903+
5904+
checkConst("struct S {\n" // #10758
5905+
" T* h;\n"
5906+
" void f(); \n"
5907+
"};\n"
5908+
"void S::f() {\n"
5909+
" char* c = h->x[y];\n"
5910+
"};\n");
5911+
ASSERT_EQUALS("[test.cpp:5] -> [test.cpp:3]: (style, inconclusive) Technically the member function 'S::f' can be const.\n", errout.str());
59035912
}
59045913

59055914
void const_handleDefaultParameters() {

0 commit comments

Comments
 (0)