From d3d70dcc4ea8e1e75407a0cffaf49ce01e8f7697 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:57:45 +0100 Subject: [PATCH] =?UTF-8?q?Fix=20#12157=20SymbolDatabase:=20Token::type()?= =?UTF-8?q?=20is=20not=20set=20properly=20when=20inn=E2=80=A6=20(#5635)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …er enum has same name as outer class --- lib/symboldatabase.cpp | 6 +++++- test/testsymboldatabase.cpp | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 8935e5073..5e9c9d240 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -5086,9 +5086,13 @@ const Enumerator * SymbolDatabase::findEnumerator(const Token * tok, std::setfindRecordInNestedList(tok1->str()); // find first scope while (scope && scope->nestedIn) { - const Scope* temp = scope->nestedIn->findRecordInNestedList(tok1->str()); + if (!temp) + temp = scope->nestedIn->findRecordInNestedList(tok1->str()); if (!temp && scope->functionOf) temp = scope->functionOf->findRecordInNestedList(tok1->str()); if (temp) { diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index cf92cb27c..ceb4ec3f2 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -5975,6 +5975,27 @@ private: ASSERT(e && e->enumerator()); ASSERT_EQUALS(E0, e->enumerator()); } + { + GET_SYMBOL_DB("struct S {\n" + " enum class E {\n" + " A, D\n" + " } e = E::D;\n" + "};\n" + "struct E {\n" + " enum { A, B, C, D };\n" + "};\n"); + ASSERT(db != nullptr); + auto it = db->scopeList.begin(); + std::advance(it, 2); + ASSERT_EQUALS(it->className, "E"); + ASSERT(it->nestedIn); + ASSERT_EQUALS(it->nestedIn->className, "S"); + const Enumerator* D = it->findEnumerator("D"); + ASSERT(D && D->value_known && D->value == 1); + const Token* tok = Token::findsimplematch(tokenizer.tokens(), "D ;"); + ASSERT(tok && tok->enumerator()); + ASSERT_EQUALS(D, tok->enumerator()); + } } void sizeOfType() {