From 10fc070f4446fbd658dab58d88015bfb81cc78a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 20 Jun 2018 14:49:55 +0200 Subject: [PATCH] SymbolDatabase: Better handling of type aliases in ValueType --- lib/symboldatabase.cpp | 2 ++ test/testsymboldatabase.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index b3e0d0b6a..24e242ac5 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -5184,6 +5184,8 @@ static const Token * parsedecl(const Token *type, ValueType * const valuetype, V valuetype->pointer++; else if (type->isStandardType()) valuetype->fromLibraryType(type->str(), settings); + else if (Token::Match(type->previous(), "!!:: %name% !!::")) + valuetype->fromLibraryType(type->str(), settings); if (!type->originalName().empty()) valuetype->originalTypeName = type->originalName(); type = type->next(); diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 6f2cac19a..759a6d702 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -146,6 +146,9 @@ private: TEST_CASE(isVariableDeclarationRValueRef); TEST_CASE(isVariableStlType); + TEST_CASE(VariableValueType1); + TEST_CASE(VariableValueType2); + TEST_CASE(findVariableType1); TEST_CASE(findVariableType2); TEST_CASE(findVariableType3); @@ -789,6 +792,22 @@ private: ASSERT(var.tokens()->tokAt(2)->scope() != 0); } + void VariableValueType1() { + GET_SYMBOL_DB("typedef uint8_t u8;\n" + "static u8 x;\n"); + const Variable* x = db->getVariableFromVarId(1); + ASSERT_EQUALS("x", x->name()); + ASSERT(x->valueType()->isIntegral()); + } + + void VariableValueType2() { + GET_SYMBOL_DB("using u8 = uint8_t;\n" + "static u8 x;\n"); + const Variable* x = db->getVariableFromVarId(1); + ASSERT_EQUALS("x", x->name()); + ASSERT(x->valueType()->isIntegral()); + } + void findVariableType1() { GET_SYMBOL_DB("class A {\n" "public:\n"