diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 5e8f2995b..472deab66 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -473,7 +473,7 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti else tok = end->tokAt(2); - if (Token::Match(tok, "= %any% ;")) { + if (Token::Match(tok, "= !!default ;")) { function.isPure(true); tok = tok->tokAt(2); } diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 434259a4d..905e358cf 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -236,6 +236,7 @@ private: TEST_CASE(symboldatabase52); // #6581 TEST_CASE(isImplicitlyVirtual); + TEST_CASE(isPure); TEST_CASE(isFunction); // UNKNOWN_MACRO(a,b) { .. } @@ -2305,6 +2306,22 @@ private: } } + void isPure() { + GET_SYMBOL_DB("class C {\n" + " void f() = 0;\n" + " C(B b) = 0;\n" + " C(C& c) = default;" + " void g();\n" + "};"); + ASSERT(db && db->scopeList.back().functionList.size() == 4); + if (db && db->scopeList.back().functionList.size() == 4) { + std::list::const_iterator it = db->scopeList.back().functionList.begin(); + ASSERT((it++)->isPure()); + ASSERT((it++)->isPure()); + ASSERT(!(it++)->isPure()); + ASSERT(!(it++)->isPure()); + } + } void isFunction() { // #5602 - UNKNOWN_MACRO(a,b) { .. } GET_SYMBOL_DB("TEST(a,b) {\n" " std::vector messages;\n"