Skip to content

Commit 391a109

Browse files
Fix #13637 Stack overflow in findShadowed() (danmar#7306)
1 parent 2e4f606 commit 391a109

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

lib/symboldatabase.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3396,8 +3396,11 @@ void SymbolDatabase::addClassFunction(Scope *&scope, const Token *&tok, const To
33963396
const Token *closeParen = tok->linkAt(1);
33973397
if (closeParen) {
33983398
const Token *eq = TokenList::isFunctionHead(closeParen, ";");
3399-
if (eq && Token::simpleMatch(eq->tokAt(-2), "= default ;")) {
3400-
func->isDefault(true);
3399+
if (eq && Token::Match(eq->tokAt(-2), "= default|delete ;")) {
3400+
if (eq->strAt(-1) == "default")
3401+
func->isDefault(true);
3402+
else
3403+
func->isDelete(true);
34013404
return;
34023405
}
34033406
if (func->type == Function::eDestructor && destructor) {

test/testsymboldatabase.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5727,6 +5727,24 @@ class TestSymbolDatabase : public TestFixture {
57275727
ASSERT(it->isDefault());
57285728
ASSERT_EQUALS(it->type, Function::Type::eDestructor);
57295729
}
5730+
{
5731+
GET_SYMBOL_DB("struct S {\n" // #13637
5732+
" ~S();\n"
5733+
"};\n"
5734+
"S::~S() = delete;\n");
5735+
ASSERT_EQUALS(db->scopeList.size(), 2);
5736+
auto scope = db->scopeList.begin();
5737+
ASSERT(!scope->functionOf);
5738+
++scope;
5739+
ASSERT_EQUALS(scope->className, "S");
5740+
ASSERT_EQUALS(scope->functionList.size(), 1);
5741+
auto it = scope->functionList.begin();
5742+
ASSERT_EQUALS(it->name(), "S");
5743+
ASSERT_EQUALS(it->tokenDef->linenr(), 2);
5744+
ASSERT(it->isDelete());
5745+
ASSERT(!it->isDefault());
5746+
ASSERT_EQUALS(it->type, Function::Type::eDestructor);
5747+
}
57305748
}
57315749

57325750
void symboldatabase109() { // #13553

0 commit comments

Comments
 (0)