From c3d7c91e88f8ac372640df20518bada0d5cd850c Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Tue, 8 Aug 2023 22:54:27 +0200 Subject: [PATCH] Additional call to setValueTypeInTokenList() (#5300) --- lib/symboldatabase.cpp | 7 ++----- lib/tokenize.cpp | 2 ++ test/testsymboldatabase.cpp | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 005d0dc22..4712e646e 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -3850,12 +3850,9 @@ void SymbolDatabase::printOut(const char *title) const } std::cout << " retType: " << func->retType << std::endl; - if (func->tokenDef->next()->valueType()) { - const ValueType * valueType = func->tokenDef->next()->valueType(); + if (const ValueType* valueType = func->tokenDef->next()->valueType()) { std::cout << " valueType: " << valueType << std::endl; - if (valueType) { - std::cout << " " << valueType->str() << std::endl; - } + std::cout << " " << valueType->str() << std::endl; } if (func->hasBody()) { diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 656db082f..1138285ab 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3339,8 +3339,10 @@ bool Tokenizer::simplifyTokens1(const std::string &configuration) if (mTimerResults) { Timer t("Tokenizer::simplifyTokens1::setValueType", mSettings->showtime, mTimerResults); + mSymbolDatabase->setValueTypeInTokenList(false); mSymbolDatabase->setValueTypeInTokenList(true); } else { + mSymbolDatabase->setValueTypeInTokenList(false); mSymbolDatabase->setValueTypeInTokenList(true); } diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 4171f68a7..3ca632831 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -510,6 +510,7 @@ private: TEST_CASE(auto17); // #11163 TEST_CASE(auto18); TEST_CASE(auto19); + TEST_CASE(auto20); TEST_CASE(unionWithConstructor); @@ -9437,6 +9438,22 @@ private: } } + void auto20() { + GET_SYMBOL_DB("enum A { A0 };\n" + "enum B { B0 };\n" + "const int& g(A a);\n" + "const int& g(B b);\n" + "void f() {\n" + " const auto& r = g(B::B0);\n" + "}\n"); + const Token* a = Token::findsimplematch(tokenizer.tokens(), "auto"); + ASSERT(a && a->valueType()); + ASSERT_EQUALS(a->valueType()->type, ValueType::INT); + const Token* g = Token::findsimplematch(a, "g ( B ::"); + ASSERT(g && g->function()); + ASSERT_EQUALS(g->function()->tokenDef->linenr(), 4); + } + void unionWithConstructor() { GET_SYMBOL_DB("union Fred {\n" " Fred(int x) : i(x) { }\n"