From 970beaa79a28ef8fbf29b0e0af3718ff90f40d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 9 Nov 2020 20:35:00 +0100 Subject: [PATCH] Clang import: Fix Variable::isReference --- lib/clangimport.cpp | 2 +- test/testclangimport.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/clangimport.cpp b/lib/clangimport.cpp index 3672dcf32..d69a4cec0 100644 --- a/lib/clangimport.cpp +++ b/lib/clangimport.cpp @@ -1349,7 +1349,7 @@ Token * clangimport::AstNode::createTokensVarDecl(TokenList *tokenList) } Token *vartok1 = addtoken(tokenList, name); Scope *scope = const_cast(tokenList->back()->scope()); - scope->varlist.push_back(Variable(vartok1, type, startToken, vartok1->previous(), 0, scope->defaultAccess(), recordType, scope)); + scope->varlist.push_back(Variable(vartok1, unquote(type), startToken, vartok1->previous(), 0, scope->defaultAccess(), recordType, scope)); mData->varDecl(addr, vartok1, &scope->varlist.back()); if (mExtTokens.back() == "cinit" && !children.empty()) { Token *eq = addtoken(tokenList, "="); diff --git a/test/testclangimport.cpp b/test/testclangimport.cpp index f4bddde9b..53116278e 100644 --- a/test/testclangimport.cpp +++ b/test/testclangimport.cpp @@ -107,6 +107,7 @@ private: TEST_CASE(symbolDatabaseFunction2); TEST_CASE(symbolDatabaseFunction3); TEST_CASE(symbolDatabaseFunctionConst); + TEST_CASE(symbolDatabaseVariableRef); TEST_CASE(symbolDatabaseNodeType1); TEST_CASE(valueFlow1); @@ -1058,6 +1059,19 @@ private: ASSERT(func.isConst()); } + void symbolDatabaseVariableRef() { + const char clang[] = "`-FunctionDecl 0x1593df0 <3.cpp:1:1, line:4:1> line:1:6 foo 'void ()'\n" + " `-CompoundStmt 0x15940b0 \n" + " |-DeclStmt 0x1593f58 \n" + " | `-VarDecl 0x1593ef0 col:7 used x 'int'\n" + " `-DeclStmt 0x1594098 \n" + " `-VarDecl 0x1593fb8 col:8 ref 'int &' cinit\n" + " `-DeclRefExpr 0x1594020 'int' lvalue Var 0x1593ef0 'x' 'int'"; + GET_SYMBOL_DB(clang); + const Variable *refVar = db->variableList().back(); + ASSERT(refVar->isReference()); + } + void symbolDatabaseNodeType1() { const char clang[] = "`-FunctionDecl 0x32438c0 line:5:6 foo 'a::b (a::b)'\n" " |-ParmVarDecl 0x32437b0 col:15 used i 'a::b':'long'\n"