diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index f54221a4175..87f2ef999c7 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -4980,40 +4980,58 @@ class TestSymbolDatabase : public TestFixture { } void symboldatabase75() { - GET_SYMBOL_DB("template \n" - "class optional {\n" - " auto value() & -> T &;\n" - " auto value() && -> T &&;\n" - " auto value() const& -> T const &;\n" - "};\n" - "template \n" - "auto optional::value() & -> T & {}\n" - "template \n" - "auto optional::value() && -> T && {}\n" - "template \n" - "auto optional::value() const & -> T const & {}\n" - "optional i;"); + { + GET_SYMBOL_DB("template \n" + "class optional {\n" + " auto value() & -> T &;\n" + " auto value() && -> T &&;\n" + " auto value() const& -> T const &;\n" + "};\n" + "template \n" + "auto optional::value() & -> T & {}\n" + "template \n" + "auto optional::value() && -> T && {}\n" + "template \n" + "auto optional::value() const & -> T const & {}\n" + "optional i;"); + + ASSERT_EQUALS(5, db->scopeList.size()); + ASSERT_EQUALS(3, db->functionScopes.size()); + + const Scope *f = db->functionScopes[0]; + ASSERT(f->function->hasBody()); + ASSERT(!f->function->isConst()); + ASSERT(f->function->hasTrailingReturnType()); + ASSERT(f->function->hasLvalRefQualifier()); + + f = db->functionScopes[1]; + ASSERT(f->function->hasBody()); + ASSERT(!f->function->isConst()); + ASSERT(f->function->hasTrailingReturnType()); + ASSERT(f->function->hasRvalRefQualifier()); + + f = db->functionScopes[2]; + ASSERT(f->function->hasBody()); + ASSERT(f->function->isConst()); + ASSERT(f->function->hasTrailingReturnType()); + ASSERT(f->function->hasLvalRefQualifier()); + } + { + GET_SYMBOL_DB("struct S {\n" // #12962 + " auto bar() const noexcept -> std::string const& { return m; }\n" + " std::string m;\n" + "};\n"); - ASSERT_EQUALS(5, db->scopeList.size()); - ASSERT_EQUALS(3, db->functionScopes.size()); - - const Scope *f = db->functionScopes[0]; - ASSERT(f->function->hasBody()); - ASSERT(!f->function->isConst()); - ASSERT(f->function->hasTrailingReturnType()); - ASSERT(f->function->hasLvalRefQualifier()); - - f = db->functionScopes[1]; - ASSERT(f->function->hasBody()); - ASSERT(!f->function->isConst()); - ASSERT(f->function->hasTrailingReturnType()); - ASSERT(f->function->hasRvalRefQualifier()); - - f = db->functionScopes[2]; - ASSERT(f->function->hasBody()); - ASSERT(f->function->isConst()); - ASSERT(f->function->hasTrailingReturnType()); - ASSERT(f->function->hasLvalRefQualifier()); + ASSERT_EQUALS(3, db->scopeList.size()); + ASSERT_EQUALS(1, db->functionScopes.size()); + + const Scope* f = db->functionScopes[0]; + ASSERT(f->function->hasBody()); + ASSERT(f->function->isConst()); + ASSERT(f->function->hasTrailingReturnType()); + ASSERT(f->function->isNoExcept()); + ASSERT(Function::returnsReference(f->function)); + } } void symboldatabase76() { // #9056