This commit is contained in:
parent
36192c50f6
commit
29b651f264
|
@ -1323,7 +1323,7 @@ void SymbolDatabase::createSymbolDatabaseSetVariablePointers()
|
|||
Token* memberTok = tok->next()->link()->tokAt(2);
|
||||
const Scope* scope = vt->containerTypeToken->scope();
|
||||
const Type* contType{};
|
||||
const std::string typeStr = vt->containerTypeToken->expressionString();
|
||||
const std::string& typeStr = vt->containerTypeToken->str(); // TODO: handle complex type expressions
|
||||
while (scope && !contType) {
|
||||
contType = scope->findType(typeStr); // find the type stored in the container
|
||||
scope = scope->nestedIn;
|
||||
|
@ -2284,12 +2284,19 @@ const Type *Variable::smartPointerType() const
|
|||
if (mValueType->smartPointerType)
|
||||
return mValueType->smartPointerType;
|
||||
|
||||
// TODO: Cache result
|
||||
const Token *ptrType = typeStartToken();
|
||||
while (Token::Match(ptrType, "%name%|::"))
|
||||
ptrType = ptrType->next();
|
||||
if (Token::Match(ptrType, "< %name% >"))
|
||||
return ptrType->scope()->findType(ptrType->next()->str());
|
||||
// TODO: Cache result, handle more complex type expression
|
||||
const Token* typeTok = typeStartToken();
|
||||
while (Token::Match(typeTok, "%name%|::"))
|
||||
typeTok = typeTok->next();
|
||||
if (Token::Match(typeTok, "< %name% >")) {
|
||||
const Scope* scope = typeTok->scope();
|
||||
const Type* ptrType{};
|
||||
while (scope && !ptrType) {
|
||||
ptrType = scope->findType(typeTok->next()->str());
|
||||
scope = scope->nestedIn;
|
||||
}
|
||||
return ptrType;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -1966,6 +1966,17 @@ private:
|
|||
"}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("struct S {\n" // #11543
|
||||
" S() {}\n"
|
||||
" std::vector<std::shared_ptr<S>> v;\n"
|
||||
" void f(int i) const;\n"
|
||||
"};\n"
|
||||
"void S::f(int i) const {\n"
|
||||
" for (const std::shared_ptr<S>& c : v)\n"
|
||||
" c->f(i);\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("namespace N {\n"
|
||||
" struct S { static const std::set<std::string> s; };\n"
|
||||
"}\n"
|
||||
|
|
Loading…
Reference in New Issue