From d30cdb8aaeb379a89ea3aa0b517d31d2e0a687bc Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Mon, 6 Jan 2025 21:17:56 +0100 Subject: [PATCH 1/3] Fix #13528 FN functionConst with overload and typed enum (regression) --- lib/symboldatabase.cpp | 6 ++++-- test/testsymboldatabase.cpp | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index a062390926a..539502c670e 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -6586,10 +6586,12 @@ void SymbolDatabase::setValueType(Token* tok, const Enumerator& enumerator, cons valuetype.setDebugPath(tok, loc); valuetype.typeScope = enumerator.scope; const Token * type = enumerator.scope->enumType; + if (type && type->astParent()) + type = type->astParent(); if (type) { valuetype.type = ValueType::typeFromString(type->str(), type->isLong()); - if (valuetype.type == ValueType::Type::UNKNOWN_TYPE && type->isStandardType()) - valuetype.fromLibraryType(type->str(), mSettings); + if (valuetype.type == ValueType::Type::UNKNOWN_TYPE) + valuetype.fromLibraryType(type->expressionString(), mSettings); if (valuetype.isIntegral()) { if (type->isSigned()) diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 6e933fe383e..4ecd8998c89 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -456,6 +456,7 @@ class TestSymbolDatabase : public TestFixture { TEST_CASE(enum16); TEST_CASE(enum17); TEST_CASE(enum18); + TEST_CASE(enum19); TEST_CASE(sizeOfType); @@ -6628,6 +6629,23 @@ class TestSymbolDatabase : public TestFixture { } } + void enum19() { + { + GET_SYMBOL_DB("enum : std::int8_t { I = -1 };\n" // #13528 + "enum : int8_t { J = -1 };\n" + "enum : char { K = -1 };\n"); + const Token* I = Token::findsimplematch(tokenizer.tokens(), "I"); + ASSERT(I && I->valueType() && I->valueType()->isEnum()); + ASSERT_EQUALS(I->valueType()->type, ValueType::CHAR); + const Token* J = Token::findsimplematch(I, "J"); + ASSERT(J && J->valueType() && J->valueType()->isEnum()); + ASSERT_EQUALS(J->valueType()->type, ValueType::CHAR); + const Token* K = Token::findsimplematch(I, "K"); + ASSERT(K && K->valueType() && K->valueType()->isEnum()); + ASSERT_EQUALS(K->valueType()->type, ValueType::CHAR); + } + } + void sizeOfType() { // #7615 - crash in Symboldatabase::sizeOfType() GET_SYMBOL_DB("enum e;\n" From 75a3ea53960c682a157aee69a12cda4a659b39f5 Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Mon, 6 Jan 2025 21:35:54 +0100 Subject: [PATCH 2/3] Fix --- test/testsymboldatabase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 4ecd8998c89..a27afa9a7d5 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -6640,7 +6640,7 @@ class TestSymbolDatabase : public TestFixture { const Token* J = Token::findsimplematch(I, "J"); ASSERT(J && J->valueType() && J->valueType()->isEnum()); ASSERT_EQUALS(J->valueType()->type, ValueType::CHAR); - const Token* K = Token::findsimplematch(I, "K"); + const Token* K = Token::findsimplematch(J, "K"); ASSERT(K && K->valueType() && K->valueType()->isEnum()); ASSERT_EQUALS(K->valueType()->type, ValueType::CHAR); } From 6611d5f3d25168b88ffcbf142f9f71d2a1ce93b8 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:17:49 +0100 Subject: [PATCH 3/3] Update testsuppressions.cpp --- test/testsuppressions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testsuppressions.cpp b/test/testsuppressions.cpp index c66a140d701..166092af2d7 100644 --- a/test/testsuppressions.cpp +++ b/test/testsuppressions.cpp @@ -1578,7 +1578,7 @@ class TestSuppressions : public TestFixture { } } - void addSuppressionLineMultiple() { + void addSuppressionLineMultiple() const { SuppressionList supprlist; ASSERT_EQUALS("", supprlist.addSuppressionLine("syntaxError"));